1. ホーム
  2. linux

[解決済み] bash - whichコマンドの結果をcdにパイプする方法

2023-01-11 05:42:13

質問

からの結果をどのようにパイプすればよいのでしょうか? which コマンドから cd ?

これは私がやろうとしていることです。

which oracle | cd
cd < which oracle

しかし、どれもうまくいきません。

これを実現する方法はないでしょうか(もちろんコピー&ペーストではなく)。

Edit : 考え直してみると、このコマンドは失敗します、なぜなら宛先ファイルはフォルダ/ディレクトリではないからです .

だから、私は今、末尾の "/oracle" の部分を取り除くより良い方法(sed や awk、あるいは Perl)を考え、実行しています :) 。

編集: OK最終的にはこうなりました。

cd `which oracle | sed 's/\/oracle//g'`

どのように解決するのですか?

パイプを使うのは、コマンドに標準入力からのパラメータを期待する場合です。( 詳細はこちら ).

とともに cd コマンドの場合はそうではありません。ディレクトリがコマンドの引数になります。このような場合、コマンド置換を使用することができます。バックティックを使うか $(...) でコマンドを評価し,変数に格納します.

path=`which oracle`
echo $path # just for debug
cd $path

は、もっと簡単な方法で行うことができますが。

cd `which oracle` 

または、パスに特殊文字が含まれる場合

cd "`which oracle`"

または

cd $(which oracle)

という表記がありますが、これはバックティック表記と同じですが、推奨されています(バックティックはアポストロフィと混同されることがあります)。

...が欲しいようです。

cd $(dirname $(which oracle))

(これはネストを簡単に使えることを示しています)

$(...) (バックティックと同様に) は二重引用符で囲まれた文字列でも機能するので、結果が最終的にスペースを含む可能性がある場合に役立ちます。

cd "$(dirname "$(which oracle)")"

(どちらの出力も二重引用符のセットを必要とすることに注意してください)。