
whichコマンドの出力を取得し、cdを親ディレクトリにインポートしたいと思います。たとえば、次の項目があるとします。
which someprogram
出力:
/home/me/somedirectory/someprogram
特定のプログラムがあるディレクトリにCDを移動したいと思います。
cd /home/me/somedirectory
私はこれを一行で完了したいと思います。最もエレガントで最もトリッキーで最も短い方法は何ですか?
答え1
使用dirname
:
cd "`dirname $(which program)`"
答え2
Bashではtype -p
overをお勧めしますwhich
。which
外部コマンドなので、時には難しいかもしれません。。sed
Final以降のすべての項目を削除し/
たり、特殊目的ユーティリティを使用したりできます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)