私自身の個人的な使用のために、私は私が一般的に使用するいくつかのディレクトリを持っており、使用を切り替えることができるようにしたいと思っていますpushd
。私は自分のために次の関数を思いついた.bashrc
:
p() {
pushd +"$(($(dirs -p | sed -n '1d;s,.*/,,;/^'"$1"'/{=;q;}')-1))" >/dev/null
}
私が次のようなディレクトリスタックを持っているとしましょう:
$ dirs -v
0 ~/repos/local_only/configs
1 ~/repos/virtualization
2 ~/repos/local_only/work
3 ~/repos/core
4 ~/repos/local_only/my_test_repo
だけを使用して、現在のディレクトリから他のディレクトリに切り替えることができますp <letter>
。ここ<letter>
で、はディレクトリ名の先頭です。(もちろん、複数の文字にすることもできます。)たとえば、;p m
に切り替わります。に切り替わります。my_test_repo
p w
work
p c
ディレクトリから使用するwork
と、スタック内の、で始まる次のディレクトリに切り替わります。c
この場合は、になりますcore
。(コマンドのq
一部はsed
、最初の結果より多くを返すことを防ぎます。)configs
代わりにdirに具体的に切り替えるために、またはを使用するか、またはもう一度使用することができp con
ます。p c
p c
コマンドのは1d
、sed
現在のディレクトリに切り替えないようにするためのものです。したがって、を使用してconfigs
ディレクトリとディレクトリを切り替えることができます。core
p c
stdout
toのリダイレクトは、の実行ごとに/dev/null
の煩わしい(私にとっての)実行を防ぎます。(とにかく、現在のディレクトリがプロンプトに表示されます。)ただし、沈黙はしません。たとえば、実行すると、次のように表示されます。dirs
pushd
stderr
p q
$ p q
-bash: pushd: +-1: directory stack index out of range
ビルトインで補完
pushd
これは置き換えられませんpopd
;; 高速スイッチングを目的としています。ディレクトリスタックに追加するために、私はまだを使用していますpushd <directory_name>
。そして、私が特定のディレクトリ(たとえばvirtualization
)で終わった場合、私はちょうどp v
そしてそれからすることができpopd
ます。
ありそうもないエラー:
これは、改行を含むディレクトリ名ではおそらく正しく機能しませんが、私の目的には関係ありません。いずれにせよ、それが行う可能性のある最悪の事態はpushd
、間違ったディレクトリに移動することです。