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
somedirOLDPWDPWD="somedir"dirs)をsomedir(スタック上の要素の数は変わりません)に置き換えます。cd -:
$OLDPWDPWDとOLDPWDPWDpushd somedir:
somedirOLDPWDPWD="somedir"somedirディレクトリスタックにプッシュする(1つの要素で拡張する)popd:
OLDPWDPWDディレクトリスタックの新しい最上位要素に設定します注:現在の作業ディレクトリがディレクトリスタックの要素と見なされるかどうかは、との間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"ます。