經常在shell下工作的筒子們經常會在不同的目錄來回切換,那麼,如何能提高切換的效率呢?不用每次手動輸入cd /path/to/dir1; cd /path/to/dir2?
在只有兩個目錄的情況下,有個很簡單也很直觀的辦法:
$ cd - #表示回到之前的目錄
多說一句,這個-還有其他的一個典型用法:如果文件名參數是一個單破折號"-",表示從標准輸入讀取文件列表:
$ grep 'abc' - #表示接受標准輸入的數據,並從中找到包含'abc'字符串的行,打印出來
abdse #我在鍵盤的輸入
abc
abc #grep的輸出
lsl
[CTRL-C] #按ctrl+c結束輸入
兩個目錄尚且可以用上述方法快速切換,那麼對於多個目錄呢?pushd,dirs和popd這一組強大而易用的命令現在可以上場了.
對於CS畢業的人來說,棧是很熟悉的了,這一組命令實際上也是維護了一個目錄棧.
pushd /path/to/dir,顧名思義,表示將指定目錄入棧,另外,它還具有一個更強大的附加功能:像將棧內的元素順序隨意調整(似乎有些違背棧的原理了:),
正是這個功能讓我們可以隨心所欲的切換目錄,而無視目錄在棧中的位置.這種用法可以描述為pushd +num 後面我將詳細介紹.
popd /path/to/dir,表示將指定的目錄出棧,當我們不需要訪問某個目錄時,就是用這個命令將其清理出'門戶'.與pushd對應,popd也有另一種形式的命令:popd +num.
dirs,顯示當前棧的內容,從左向右分別是棧頂->棧底.
應用示例:
$ cd
~$ dirs #顯示當前目錄棧
#---------------------------------
#我們先加幾個目錄玩玩
#---------------------------------
~$ pushd ~/A #將指定目錄入棧
~/A ~
~/A$ pushd ~/B #繼續入棧, 注意此時的當前目錄已經切換到剛剛入棧的目錄,即:~/A
~/B ~/A ~ #當前棧的內容從左往右:棧頂->棧底
~/B$ pushd ~/C #最後一個了,大家堅持住
~/C ~/B ~/A ~
#---------------------------------
#現在我們試試切換目錄
#---------------------------------
~/C$dirs #打印當前棧的內容
~/C ~/B ~/A ~
~/C$ pushd #切換到B目錄,pushd 意思隱含為pushd +1
~/B ~/C ~/A #切換過去的同時會打印出切換後的棧情形.
~/B$ #注意當B到棧頂後,剩余元素位置按其之前棧內順序排列
~/B$ pushd +2 #切換到棧頂+2個目錄即A目錄
~/A ~/B ~/C
~/A$
#---------------------------------
#有不用的目錄,將其扔出
#---------------------------------
~/A$ popd +1 #將~/B目錄出棧
~/A ~/C
~/A$ #此時目錄不會切換