1つのステップでディレクトリを変更するには、コマンド「whereis」の出力を「cd」に渡します。

1つのステップでディレクトリを変更するには、コマンド「whereis」の出力を「cd」に渡します。

whereisコマンドの出力を同じ行のコマンドにパイプする方法が見つからないため、2番目のステップでそれを行うcd必要はありません。cd

以下のように伝えてみました。

cd $(whereis node_modules)

または

cd "`dirname $(whereis node_modules)`"

返品

cd "$(whereis node_modules)"

しかし、上記の方法のいずれも機能しません。

上記のコードで何が問題なのかを知る人がいますか?

答え1

あなたはこれを行うことができます、

cd "`which node_modules`"

dirnameディレクトリのインポートに使用します。

cd "$(dirname "$(which node_modules)" )"

コメントで述べたように私はこれを一段階で行うことを期待しています。&はnod_moduleディレクトリを想定しているため、次のコマンドを使用してこれを実行できます。

cd $(whereis node_modules | cut -d ' ' -f2)

(後者のコマンドはwhereisBSDではなくLinuxを使用しており、パスにスペースが含まれていないと仮定します。)

@Dani_Iが提案したようにこれを見ることができます「which」を使わないのはなぜですか?それでは何を使うべきですか?、これはより便利です。

答え2

これはトリックを行うようです

cd "$(dirname "$(whereis node_modules)")"

あなたの意見によると、行きたい場合入力する宛先がディレクトリの場合:

location=$(whereis node_modules)
if [[ -d "$location" ]]; then
    cd "$location"
else
    cd "$(dirname "$location" )"
fi

上記は簡単にあなたのものにすることができます.bash_profile

答え3

whereisコロンで区切られたパターン名と位置を提供するため、cd結果にまたはを実行しても効果はありません。dirnamewhereis

$ whereis node_modules
node_modules: /usr/lib/node_modules

正しい方法は、npmそれ自体を使用してデフォルトのプレフィックスを取得することです。

$ cd "$(npm get prefix)/lib/node_modules"
$ pwd
/usr/lib/node_modules

答え4

これは私にとって効果的です。その中には、コマンドラインに結果を渡す目的でのみ使用される -q (同等) オプションがあります。

cd `whereis -q node_modules`

関連情報