bashとzshのpushd / popdの動作に違いはありますか?zsh cdでは、cd-はpushd / popd(cdのときにディレクトリを自動的に追加/ポップします)とまったく同じように動作しますが、bash cdではdirスタックに影響しません。
誰かが私に素晴らしいポインタをくれるとしたら。
pushd
設定しますOLDPWD
dirs
常にPWDを最初の要素として保持します
bashとzshのpushd / popdの動作に違いはありますか?zsh cdでは、cd-はpushd / popd(cdのときにディレクトリを自動的に追加/ポップします)とまったく同じように動作しますが、bash cdではdirスタックに影響しません。
誰かが私に素晴らしいポインタをくれるとしたら。
pushd
設定しますOLDPWD
dirs
常にPWDを最初の要素として保持します
回答:
場合によります。ではzsh
、あなた構成することができcd
、自動的にディレクトリスタック上の古いディレクトリをプッシュするが、それはデフォルトの設定ではありません。
zsh
デフォルト設定でわかる限り、動作は次のようになりますbash
。
cd somedir
somedir
OLDPWD
PWD="somedir"
dirs
)をsomedir
(スタック上の要素の数は変わりません)に置き換えます。cd -
:
$OLDPWD
PWD
とOLDPWD
PWD
pushd somedir
:
somedir
OLDPWD
PWD="somedir"
somedir
ディレクトリスタックにプッシュする(1つの要素で拡張する)popd
:
OLDPWD
PWD
ディレクトリスタックの新しい最上位要素に設定します注:現在の作業ディレクトリがディレクトリスタックの要素と見なされるかどうかは、との間zsh
で異なりますbash
。bash
上記のリストの参照として使用しました。
ではbash
、現在の作業ディレクトリディレクトリスタックの最上位要素であると考えられています。man 1 bash
こう述べています。
pushd [-n] [dir]
[…]
dir
最上部のディレクトリスタックに追加し、cd
組み込みの引数として提供されたかのように、新しい現在の作業ディレクトリにします。[…]
Printing DIRSTACK
(echo ${dirstack[@]}
)は、最初の要素がと同一であることを確認し$PWD
ます。
zsh
現在の作業ディレクトリのディレクトリ・スタックの一部(まだと示されていませんdirs
)。man 1 zshbuiltins
言う:
pushd [ -qsLP ] [ arg ]
[…]現在のディレクトリを変更し、古い現在のディレクトリをディレクトリスタックにプッシュします。最初の形式では、現在のディレクトリをargに変更します。[…]
dirstack
(echo ${dirstack[@]}
)を印刷して、それをの出力と比較すると、が `dirstackの一部ではないdirs
ことがPWD
わかります。
両方のシェルでdirs
、現在の作業ディレクトリを最初の要素として出力します。また、両方のシェルで、インデックス1
を持つディレクトリスタック要素は、最後より前の現在のディレクトリを参照しpushd
ます。これは、の配列にzsh
は通常から1
番号が付けられるのに対し、にはから番号が付け0
られるためbash
です。実用的な違いはほとんどありません
上記のように、この動作はで変更できますzsh
。
あなたが設定した場合AUTO_PUSHD
にオプションをzsh
(setopt autopushd
)cd somedir
のように振る舞いpushd somedir
、前のディレクトリが自動的にディレクトリスタックにプッシュされ、。これはおそらくあなたのマシンに当てはまります。実行setopt
して、デフォルトの方法が設定されていないオプションのリストを取得できます。autopushd
リストに表示されるかどうかを参照してください。
しかし、これはのようcd -
に動作するように変更されませんpopd
。代わり$PWD
に、ディレクトリスタックにプッシュし、ディレクトリをに変更し$OLDPWD
ます。つまり、繰り返し呼び出すcd -
と、実際にはディレクトリスタックが大きくなります(($PWD $OLDPWD $PWD $OLDPWD $PWD …)
)。それが実際popd
にあなたのシステムと全く同じように振る舞うなら、私cd
は実際に組み込み(whence -v cd
)かどうかを提案します。エイリアスまたは関数に置き換えられる可能性があります。
AUTO_PUSHD
有効にするとディレクトリスタックがかなり急速に成長するため、パラメータDIRSTACKSIZE
を目的の最大サイズに設定してサイズを制限できます。オプションを
設定することにより、重複を防ぐこともできPUSHD_IGNORE_DUPS
ます。
その他のオプションについては、マニュアルをご覧ください。
dirs
何ですか?
popd
パスを入力する(または知る)必要なく、以前にアクセスしたディレクトリに戻ることができます。
cd
すると、シェル変数OLDPWD
が前のディレクトリに設定され、cd -
に変換されcd "$OLDPWD"
ます。