CDPATH
bashを使用して私が頻繁に訪れるディレクトリにディレクトリをシンボリックリンクしたいと思います。ただし、次の操作を行います。
CDPATH="~/symlinks"
両方がある場合、ジョブcd SUBDIR
は停止します。そのディレクトリは現在の作業ディレクトリよりも優先されます。./SUBDIR
~/symlinks/SUBDIR
CDPATH
私は以下を使ってこの問題を解決しようとしました。
CDPATH=".:~/symlinks"
これは優先順位の問題を解決しますが、cd
サブディレクトリに移動すると常にフルパスが印刷されます。
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
これは少し迷惑なことです。私もできることを知っています以下を実行してすべてのcd
出力を抑制します。alias cd='> /dev/null cd'
しかし、他の項目のパスを印刷したいCDPATH
(または実行時cd -
)。私ができるより良いことはありませんか?
答え1
2つの手がかり:
CDPATH
存在しないか空の文字列の場合はcd SUBDIR
正常に機能し、追加のオーバーフローは印刷されません。Bashのマニュアルページは次のように述べています。
この変数は、
CDPATH
次を含むディレクトリの検索パスを定義しますdir
。CDPATH
検索に含まれる各ディレクトリ名dir
。の代替ディレクトリ名はCDPATH
コロン()で区切られています:
。空のディレクトリ名はCDPATH
現在のディレクトリと同じです。つまり、「。」
マニュアルページは過度に単純化されているようです。明らかに、空のディレクトリ名(つまり空の文字列)は次のとおりです。いいえ.
CDPATH=.
これは、追加の出力を生成しますが、CDPATH=
追加の出力を生成しないのとまったく同じです。ただし、空のディレクトリは許可されており、空のディレクトリCDPATH
は追加の出力を生成しないため、次のことができます。
# The first entry is intentionally an empty string.
CDPATH=":~/symlinks"
テスト(bash 4.4.12を使用)で期待どおりに機能することが確認されました。代わりに tocd SUBDIR
に変更して実行します。./SUBDIR
~/symlinks/SUBDIR
いいえ追加の排出物を印刷します。