「popd」が間違ったディレクトリをポップアップするのはなぜですか?

「popd」が間違ったディレクトリをポップアップするのはなぜですか?

これが予想される動作ですかpopd

>>> dirs -v
0 dirA
1 dirB
>>> dirs +0
dirA
>>> popd -n +0
dirA
>>> dirs -v
0 dirA

私は最後の行でdirBだけがスタックに残っていることを知りたいのですが。なぜ dirB を削除したのか理解できません。

これはGNU bashバージョン5.2.15(1)リリース(aarch64-apple-darwin22.1.0)です。私のPushdとPopdはRVMによって関数に変換されましたが、設定を解除して組み込み関数を使用しても動作は同じです。だから私はpoptの意味を間違って理解したようです。

ここで dirA は作業ディレクトリです。マニュアルには、「現在のディレクトリは常にスタックの最初のディレクトリです」と記載されていますが、スタックからアイテムをポップすることもできると述べているので、スタックの最上位要素をポップしようとしている奇妙な灰色の領域かもしれません。cd行動を抑制しながら。

マニュアルから:

ディレクトリスタックから要素を削除します。要素は、dirs にリストされた最初のディレクトリから 0 から始まり、番号が付けられます。つまり、 popd は popd+0 と同じです。

引数が指定されない場合、popt はスタックから最上位ディレクトリを削除し、新しい最上位ディレクトリに変更します。

パラメーターが指定されている場合は、次の意味を持ちます。

-nスタックのみが操作されるようにスタックからディレクトリを削除するときのディレクトリに対する一般的な変更を抑制します。

+Nスタックから0から始まるN番目のディレクトリを削除します(dirsによって印刷されたリストの左側から計算)。

-Nスタックから0から始まるN番目のディレクトリを削除します(dirsによって印刷されたリストの右側から計算)。

ディレクトリスタックの最上位要素が変更され、-nオプションが指定されていない場合、popdはcd組み込みコマンドを使用してスタックの上部にあるディレクトリに変更します。 cd が失敗した場合、 popd はゼロ以外の値を返します。

それ以外の場合、無効なオプションが見つかった場合、またはディレクトリスタックが空の場合、または存在しないディレクトリスタックエントリが指定されている場合、poptは失敗ステータスを返します。

popd コマンドが成功すると、Bash は dirs を実行してディレクトリスタックの最終内容を表示し、状態 0 を返します。

ベストアンサー1

おすすめ記事