
我一直在 bash 中進行實驗pushd
(popd
Cygwin,手冊頁顯示“GNU bash 4.1”),並且手冊頁似乎與行為不太匹配。
對於pushd
,命令
% pushd +1
兩者都會旋轉堆疊並更改工作目錄;
% pushd -n +1
只是旋轉堆疊。這似乎與手冊頁相符。
但
% popd +1
從堆疊中刪除一個條目,但不更改工作目錄(即使未提供“-n”)。這似乎與下面引用的手冊頁不符:
參數(如果提供)具有以下含義:-n 從堆疊中刪除目錄時抑制目錄的正常更改,以便僅操作堆疊。
+n 刪除n從顯示的清單左側算起的第一個條目
dirs
,從零開始。例如:「popd +0
」刪除第一個目錄,「popd +1
」刪除第二個目錄。
這是應該的方式嗎?
答案1
我現在嘗試 popd/pushd,我認為這就是它應該的樣子。邏輯是-n
抑制目錄的更改如果本來應該沒有的-n
。
popd +N
不N
等於零不會更改目錄。它僅從堆疊中刪除元素。所以在這種情況下-n
必須什麼也不做,因為它沒有變化可以抑制。
相反,如果使用popd -n
or popd -n +0
,則會刪除堆疊的第二個頂部元素,而不是最頂部的元素。因為如果你刪除了最上面的一個,你的目錄就會改變。我的意思是如果你有:
0 ~/one/two/three
1 ~/one/two
2 ~/one
3 ~
當你做popd +0
或popd
不做時-n
您目前的目錄已變更為 ~/one/two 並且目錄堆疊現在為:
1 ~/one/two
2 ~/one
3 ~
所以-n
應該要抑制這種行為。因此,如果,反而您運行popd -n +0
或popd -n
仍在舊目錄中,目錄堆疊現在是:
0 ~/one/two/three
1 ~/one
2 ~
您可以看到第二個頂部元素 ~/one/two 被刪除,而不是最頂部(這樣您就可以保留在舊目錄中)。
因此,我在這裡試圖強調的是,目錄堆疊的頂部始終是當前目錄。並且-n
應該防止目錄的更改。所以-n
應該要防止棧頂的改變。但如果棧頂沒有改變,標誌-n
就沒有任何作用。