web-dev-qa-db-ja.com

プッシュされたディレクトリスタックはどのように保存されますか?

関連する質問で 誰かが述べています シェルが終了すると、pushdコマンドのディレクトリスタックが空になります。しかし、howスタックは実際に格納されていますか? bashの代わりに fish を使用し、コマンドは同じように機能します。 pushd(およびpopd)は、使用しているシェルとは独立して機能すると思います。または、両方のシェルに独自の実装がありますか?

2
jallersma

ディレクトリスタックは永続的な場所には保存されません。シェルはそれをプロセスメモリの配列DIRSTACK(ユーザーによる変更に制限があります)に保持するだけです。厳密にはスタックではありません。bashとkshを使用すると、指定した数だけ左右に回転させることもできます。

Bashでは、dirsコマンドはさまざまな方法でスタックをクリアまたは表示し、popdは指定されたディレクトリを削除し、pushdはディレクトリを追加するか、スタックを回転して次のいずれかに変更します。すでに保存されているdir。

プッシュされたスタックは、そのように「クリア」されません。 Pushdはシェルに組み込まれているものであり、外部コマンドではありません(シェル自体の環境を変更することはできません)。各シェルは独自のプッシュされたデータを保持し、そのシェルプロセスがなくなると、コンテンツは破棄されます。

2
Paul_Pedant