システムが管理する複数のディレクトリを切り替えるためのクイックコマンドライン方法は何ですか?私の言葉は、pushd .
andを使ってpopd
切り替えることができますが、スタックの一番下から永久に取り出すのではなく、複数を保存して繰り返すにはどうすればよいですか?
ベストアンサー1
bash
pushd
に内蔵+
そして-
オプションはディレクトリスタックを回転させることができます。構文は多少混乱する可能性があります。おそらく、スタックが次のようになるからです。若い配列に基づいています。これらの単純なラッパー関数はディレクトリスタックを繰り返します。
# cd to next directory in stack (left rotate)
ncd(){ pushd +1 > /dev/null ; }
# cd to previous directory in stack (right rotate)
pcd(){ pushd -0 > /dev/null ; }
テスト:4つのディレクトリスタックを設定します。
dirs -c # clear directory stack
cd /home ; pushd /etc ; pushd /bin ; pushd /tmp
今/tmpは現在のディレクトリであり、スタックは次のとおりです。
/tmp /bin /etc /home
スタックの次のディレクトリに4回変更して表示します。
ncd ; pwd ; ncd ; pwd ; ncd ; pwd ; ncd ; pwd
出力:
/bin
/etc
/home
/tmp
スタックの前のディレクトリに4回変更して表示します。
pcd ; pwd ; pcd ; pwd ; pcd ; pwd ; pcd ; pwd
出力:
/home
/etc
/bin
/tmp
についてcd -
:ワイルドカード回答ヘルプでは、cd -
使用しない方法について説明します。$DISTACK配列(これは$OLDPW変数)cd -
影響を与えないように$DISTACKスタックベースの交換はこのように行わなければなりません。この問題を解決するには、次の簡単な方法を使用してください。$DISTACK- ベース交換機能:
scd() { { pushd ${DIRSTACK[1]} ; popd -n +2 ; } > /dev/null ; }
テスト:
dirs -c; cd /tmp; \
pushd /bin; \
pushd /etc; \
pushd /lib; \
pushd /home; \
scd; dirs; scd; dirs
出力:
/bin /tmp
/etc /bin /tmp
/lib /etc /bin /tmp
/home /lib /etc /bin /tmp
/lib /home /etc /bin /tmp
/home /lib /etc /bin /tmp