Shell 使用 pushd 和 popd實現快速定位,如果需要在文件系統的多個位置上切換時,慣常的實踐就是復制並粘貼路徑,然后使用cd
命令。但當涉及位置不止一個的時候,這種方法的效率並不高。如果需要在位置之間來回切換,時間都耗費在輸入或粘貼路徑上了。Bash和其他shell都支持使用pushd
和popd
命令切換目錄。
預備知識
pushd
和popd
可以用於在多個目錄之間切換而無需重新輸入目錄路徑。這兩個命令會創建一個路徑棧,它是一個保存了已訪問目錄的LIFO列表(LastInFirstOut,后進先出)。
實戰演練
可以使用pushd
和popd
來代替cd
命令。
(1) 壓入並切換路徑:
現在棧中包含/var/www ~,當前目錄為 /var/www。
(2) 再壓入下一個目錄路徑:
現在棧中包含/usr/src /var/www ~,當前目錄為/usr/src。
你可以根據需要壓入更多的目錄路徑。
(3) 查看棧的內容:
(4) 當你想切換到棧中任意一個路徑時,將每條路徑從0編號到n,然后使用你希望切換到的路徑編號。例如:
這條命令會將棧進行翻轉並切換到目錄/usr/share。pushd
總是向棧中添加路徑。如果要從棧中刪除路徑,可以使用popd
。
(5) 刪除最近壓入的路徑並切換到下一個目錄:
假設現在棧包含/usr/src /var/www ~ /usr/share /etc,當前目錄是 /usr/src,popd
會將棧更改為/var/www ~ /usr/share /etc,然后把當前目錄切換至/var/www。
(6) 用popd +num
可以從棧中移除特定的路徑。num
是從左到右、從0到n開始計數的。
補充內容
讓我們再進行一些基本的目錄定位練習。
當涉及3個以上的目錄時,pushd
和popd
就可以發揮作用了。但是如果只涉及兩個位置,還有另一個更簡便的方法:cd -
。
假設當前路徑是 /var/www,執行下面的命令:
現在要切換回 /var/www,不需要再輸入/var/www了,只執行:
你還可以再切換到 /usr/src: