使用“-n”選項的 popd 和 Pushd 行為

使用“-n”選項的 popd 和 Pushd 行為

我一直在 bash 中進行實驗pushdpopdCygwin,手冊頁顯示“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 +NN等於零不會更改目錄。它僅從堆疊中刪除元素。所以在這種情況下-n必須什麼也不做,因為它沒有變化可以抑制。

相反,如果使用popd -nor popd -n +0,則會刪除堆疊的第二個頂部元素,而不是最頂部的元素。因為如果你刪除了最上面的一個,你的目錄就會改變。我的意思是如果你有:

 0  ~/one/two/three
 1  ~/one/two
 2  ~/one
 3  ~

當你做popd +0popd不做時-n

您目前的目錄已變更為 ~/one/two 並且目錄堆疊現在為:

 1  ~/one/two
 2  ~/one
 3  ~

所以-n應該要抑制這種行為。因此,如果,反而您運行popd -n +0popd -n仍在舊目錄中,目錄堆疊現在是:

 0  ~/one/two/three
 1  ~/one
 2  ~

您可以看到第二個頂部元素 ~/one/two 被刪除,而不是最頂部(這樣您就可以保留在舊目錄中)。

因此,我在這裡試圖強調的是,目錄堆疊的頂部始終是當前目錄。並且-n應該防止目錄的更改。所以-n應該要防止棧頂的改變。但如果棧頂沒有改變,標誌-n就沒有任何作用。

相關內容