1、在任意目錄之間快速移動 你發現自己要在兩個或更多目錄之間頻繁移動,一會切換到這裡,一會切換到那裡,來回跳轉。這些目錄之間隔得還挺遠,反覆輸入冗長的路徑讓人疲憊不堪。 使用內建命令 pushd 和 popd 來管理目錄棧,輕鬆地在目錄之間切換。下麵是一個簡單的示例: $ cd /tmp/tank ...
1、在任意目錄之間快速移動
你發現自己要在兩個或更多目錄之間頻繁移動,一會切換到這裡,一會切換到那裡,來回跳轉。這些目錄之間隔得還挺遠,反覆輸入冗長的路徑讓人疲憊不堪。
使用內建命令 pushd 和 popd 來管理目錄棧,輕鬆地在目錄之間切換。下麵是一個簡單的示例:
$ cd /tmp/tank
$ pwd
/tmp/tank
$ pushd /var/log/cups
/var/log/cups /tmp/tank
$ pwd
/var/log/cups
$ ls
access_log error_log page_log
$ popd
/tmp/tank
$ ls
empty full
$ pushd /var/log/cups
/var/log/cups /tmp/tank
$ pushd
/tmp/tank /var/log/cups
$ pushd
/var/log/cups /tmp/tank
$ pushd
/tmp/tank /var/log/cups
$ dirs
/tmp/tank /var/log/cups
棧是一種後進先出的結構,這兩個命令也正是這麼做的。如果對一個新目錄使用 pushd,那麼它會將前一個目錄壓入棧中。當使用 popd時,它會彈出棧頂保存的當前位置,切換到新的棧頂目錄。使用這些命令更改位置時,會從左到右輸出目錄棧中的值,對應於棧中自頂向下的順序。
如果使用 pushd 時沒有指定目錄,那麼它會交換棧頂的兩個目錄的位置,這樣就可以重覆使用 pushd 命令來實現兩者之間的切換。cd命令也能夠達到相同效果。
如果不記得目錄棧中都有哪些目錄,可以使用內建命令 dirs 按照從左到右的順序顯示。加上 -v 選項後,顯示形式更形象。
$ dirs -v
0 /opt/yongheng
1 /opt/yongheng/Shell
$
數字可用來調整棧內目錄的位置。pushd +1 會將編號為 1 的目錄置為棧頂(並切換到該目錄)並將其他目錄下壓。
$ pushd +1
/opt/yongheng/Shell /opt/yongheng
$ dirs -v
0 /opt/yongheng/Shell
1 /opt/yongheng
要想看到類似於棧的目錄列表,但又不希望出現編號,可以使用 -p選項。
# dirs -p /opt/yongheng/Shell /opt/yongheng
2、重覆上一個命令
你剛剛輸入了一個又長又麻煩的命令,其中包含了冗長的路徑名和一堆複雜的參數。現在需要重新執行該命令。難道還得再輸入一次?
這個問題有兩種解決方法。第一種方法只需要在提示符下輸入兩個驚嘆號,然後 bash 就會顯示並重覆執行上一個命令。例如:
$ cd /opt/ $ !! cd /opt/
另一種(更現代的)方法是使用箭頭鍵。按上箭頭鍵會回滾到執行過的上一個命令。如果找到了需要的命令,按下 Enter 鍵就可以(再次)執行該命令。
3、參數重用
重用上一個命令很簡單,使用 !! 就行了,但你需要的未必總是整個命令。如何只重用最後一個參數呢?
用 !$ 指明上一個命令中的最後一個參數。!:1 表示第一個參數,!:2 表示第二個參數,以此類推。
多個命令使用相同的文件名為參數是司空見慣的事情。最常見的場景之一就是程式員編輯源代碼文件,然後編譯、再編輯,再編譯……有了 !$,事情就方便多了。如下:
$ vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$ vi !$
vi /some/long/path/name/you/only/type/once
...
$ gcc !$
gcc /some/long/path/name/you/only/type/once
...
$
明白其中的意思了嗎?這不僅省去了大量的鍵盤輸入,還避免了錯誤。如果編譯時輸錯文件名,那編譯的可就不是剛剛編輯好的源代碼文件了。有了 !$,就可以始終得到剛剛用過的文件名。要是想重用的參數位於命令行內部,可以使用帶編號的 !: 命令來獲取。
4、安全第一,命令測試
一不小心就會輸錯字元。 (不信你瞧!)即便是簡單的 bash 命令,由此帶來的後果也非常嚴重:你會移動錯或刪錯文件。如果再加上模式匹配,結果更讓人心跳,因為模式中的輸入錯誤會導致南轅北轍的結果。小心謹慎的用戶會怎麼做?
可以使用命令歷史特性和鍵盤便捷方式來重覆參數,無須從頭輸入,因此能夠減少輸入錯誤。如果要用到棘手的模式來匹配文件,先用echo 測試一下模式能否正常匹配,然後再用 !$ 進行實際操作。例如:
$ ls
ab1.txt ac1.txt jb1.txt wc3.txt
$ echo *1.txt
ab1.txt ac1.txt jb1.txt
$ echo [aj]?1.txt
ab1.txt ac1.txt jb1.txt
$ echo ?b1.txt
ab1.txt jb1.txt
$ rm !$
rm ?b1.txt
$
echo 是檢查模式匹配結果的一種方法。一旦確信結果符合預期,就可以將模式用於實際命令。這裡我們要刪除有特定名稱的文件,沒人願意在這種事上犯錯。
本文由
傳智教育博學谷
教研團隊發佈。如果本文對您有幫助,歡迎
關註
和點贊
;如果您有任何建議也可留言評論
或私信
,您的支持是我堅持創作的動力。轉載請註明出處!