我找不到在同一行中将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
为您提供模式名称和位置,以冒号分隔,因此对结果执行cd
or不起作用:dirname
whereis
$ 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`