いくつかのファイルがあるディレクトリに変更するには、bashのワンライナー
質問
私は、多くの場合、特定の実行可能ファイルがあるディレクトリに変更したいです。だから私のようなものが欲しいのです。
cd `which python`
Pythonコマンドがインストールされているディレクトリに変更します。 CDがディレクトリではなく、ファイルがかかるのでしかし、これは、明らかに違法です。そこで私は、ファイル名を取り除くために何ができるいくつかの正規表現-fooが明らかであるが、それは簡単なワンライナーであること、それのポイントを台無しにしてしまう。
解決
ここます:
cd $(dirname `which python`)
編集ます:
でも簡単に(実際にこの時間をテストした):
function cdfoo() { cd $(dirname `which $@`); }
そして、 "cdfooパイソン"。
他のヒント
(「が」「dirnameに」とはるかに悪い、役に立たないが、人気のある)多分ビットの書き換えをこれらすべての外部プログラムを避けるために:
cdfoo() {
tgtbin=$(type -P "$1")
[[ $? != 0 ]] && {
echo "Error: '$1' not found in PATH" >&2
return 1
}
cd "${tgtbin%/*}"
}
これはまた、上から珍しいキーワード「機能」を修正し、(非常に単純な)エラー処理を追加します。
よりsphisticatedソリューションの開始することができます。
比較のために:
zsh:~% cd =vi(:h) zsh:/usr/bin%
= CMDはCMDにパスに展開し、(:h)はヘッドを取るグロブ改質剤である
のzshは書き込みだけでなく強力です。
そのようなことは、トリックを行う必要があります:
cd `dirname $(which python)`
私はアロットを使用しました一つの特徴はのpushd / POPDです。あなたがディレクトリを変更する前に、現在の作業ディレクトリに戻したい場合は、あなたがたどこの歴史を維持しようとする必要がないように、これらは、ディレクトリスタックを維持します。
例
pushd $(dirname `which $@`)
...
popd
あなたはこのようなものを使用することができます:
cd `which <file> | xargs dirname`
私は、存在しない/ nonpath引数のためのdirnameのそれに従ってください。
)cdfooの行動を(作る簡単なエラー処理のビットを追加しましたfunction cdfoo() { cd $(dirname $(which $1 || ( echo . && echo "Error: '$1' not found" >&2 ) ));}
所属していません StackOverflow