将“whereis”命令的输出传递给“cd”以一步更改目录

将“whereis”命令的输出传递给“cd”以一步更改目录

我找不到在同一行中将whereis命令的输出传递给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)

(请注意,后一个命令假设正在使用 Linux whereis,而不是 BSD,并且路径不包含任何空格。)

根据@Dani_I的建议,你可以看看这个为什么不用“哪个”呢?那该用什么呢?,这可能更有用。

答案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为您提供模式名称和位置,以冒号分隔,因此对结果执行cdor不起作用: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`

相关内容