Bourne Again和TC Shell都允許用戶將其正在使用的目錄列表存放起來,這樣就可以在這些目錄之間輕易移動。這個目錄列表稱爲棧。它模擬了餐廳所用的盤子:一般將盤子放到棧的頂部或者從棧的頂部取盤子,這就創建了一個先入後出(FILO)的棧。
1. dirs:顯示棧
內置命令dirs顯示目錄棧的內容。如果當目錄棧是空的時候調用dirs,它將顯示工作目錄的名字。
$ dirs ~/literature |
內置命令dirs使用代字符~表示用戶主目錄的名字。下面幾節中的示例均假設用戶使用圖8-2中給出的目錄結構。
圖8-2 示例所使用的目錄結構 |
2. pushd:將目錄壓入棧中
使用內置命令pushd(push directory,將目錄推到棧頂)可以改變目錄,同時添加一個新的目錄到棧頂。除改變目錄之外,內置命令pushd還將顯示棧的內容。圖8-3闡明瞭下面的示例。
$ pushd ../demo ~/demo ~/literature $ pwd /home/sam/demo $ pushd ../names ~/names ~/demo ~/literature $ pwd /home/sam/names |
圖8-3 創建目錄棧 |
當不帶參數使用pushd時,pushd交換棧頂最上面的兩個目錄,並將新的棧頂目錄(即原來的次棧頂目錄)作爲新的工作目錄(如圖8-4所示):
$ pushd ~/demo ~/names ~/literature $ pwd /home/sam/demo |
圖8-4 使用pushd改變工作目錄 |
這樣使用pushd,就可以輕易地在兩個目錄之間來回移動。不管是否顯式地創建目錄棧,都可以使用cd– 切換到前一個目錄。爲了訪問目錄棧中的其他目錄,可以在調用pushd時,帶上一個以加號開頭的數字作爲參數。棧中目錄的編號從棧頂開始算起,棧頂目錄的編號是0。下面的pushd命令繼續前一個示例,將工作目錄改變到literature,並將literature移動到棧頂。
$ pushd +2 ~/literature ~/demo ~/names $ pwd /home/sam/literature |
3. popd:將目錄從棧中彈出
使用內置命令popd(pop directory,彈出目錄)可將目錄從棧中移出。不帶參數的popd將棧頂目錄從棧中移出,並將工作目錄改變到這個新的棧頂目錄。下面的示例和圖8-5給出了這種情況。
$ dirs ~/literature ~/demo ~/names $ popd ~/demo ~/names $ pwd /home/sam/demo |
圖8-5 使用popd命令將目錄從棧中移出 |
爲了移出除棧頂之外的其他目錄,可以使用一個以加號開頭的數字作爲參數傳遞給popd。下面的示例將目錄編號1(即demo)移出:
$ dirs ~/literature ~/demo ~/names $ popd +1 ~/literature ~/names |
移出標號不爲0的目錄並不會改變工作目錄。