cdの入力に使用されたコマンドの出力

cdの入力に使用されたコマンドの出力

whichコマンドの出力を取得し、cdを親ディレクトリにインポートしたいと思います。たとえば、次の項目があるとします。

which someprogram

出力:

/home/me/somedirectory/someprogram

特定のプログラムがあるディレクトリにCDを移動したいと思います。

cd /home/me/somedirectory

私はこれを一行で完了したいと思います。最もエレガントで最もトリッキーで最も短い方法は何ですか?

答え1

使用dirname:

cd "`dirname $(which program)`"

答え2

Bashではtype -poverをお勧めしますwhichwhich外部コマンドなので、時には難しいかもしれません。sedFinal以降のすべての項目を削除し/たり、特殊目的ユーティリティを使用したりできますdirname

cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"

コマンドラインで\[?*ディレクトリに特殊文字(スペースまたは)が含まれていない場合は、引用符を省略できます。バックティックの1つの代わりにバックティックを使用することもできます$(…)(ネストされたバックティックは難しく、ここではそれほど価値がありません)。

cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`

zshにはより簡潔な構文があります。

cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}

(はい、最後は不思議です。値が同じ変数${VAR+TEXT}の構文を使用します。)_=program$(whence -p program)

関連情報