bash - 如何将结果从which命令传递到cd

Mic*_*Mao 78 linux bash shell cd

我如何将which命令的结果传递给cd

这就是我想要做的:

which oracle | cd
cd < which oracle
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用.

有没有办法实现这一点(而不是复制/粘贴)?

编辑:第二个想法,此命令将失败,因为目标文件不是文件夹/目录.

所以我正在考虑并找出一个更好的方法来摆脱现在的尾随"/ oracle"部分(sed或awk,甚至是Perl):)

编辑:好的,这就是我最终得到的:

cd `which oracle | sed 's/\/oracle//g'`
Run Code Online (Sandbox Code Playgroud)

myk*_*hal 109

在命令需要标准输入的参数的情况下使用管道.(更多关于此).

使用cd命令并非如此.该目录是命令参数.在这种情况下,您可以使用命令替换.使用反引号或$(...)评估命令,将其存储到变量中..

path=`which oracle`
echo $path # just for debug
cd $path
Run Code Online (Sandbox Code Playgroud)

虽然它可以用更简单的方式完成:

cd `which oracle` 
Run Code Online (Sandbox Code Playgroud)

或者如果你的路径有特殊字符

cd "`which oracle`"
Run Code Online (Sandbox Code Playgroud)

要么

cd $(which oracle)
Run Code Online (Sandbox Code Playgroud)

这相当于反引号符号,但建议(反引号可以与撇号混淆)

..但看起来你想要:

cd $(dirname $(which oracle))
Run Code Online (Sandbox Code Playgroud)

(告诉你可以轻松使用嵌套)

$(...) (以及反引号)也可以在双引号字符串中工作,这有助于结果最终可能包含空格.

cd "$(dirname "$(which oracle)")"
Run Code Online (Sandbox Code Playgroud)

(请注意,两个输出都需要一组双引号.)

  • 你需要另一对引号:`cd"$(dirname"$(which oracle)")"`. (4认同)

小智 22

用dirname来获取目录:

cd $(which oracle | xargs dirname)
Run Code Online (Sandbox Code Playgroud)

编辑:注意包含空格的路径,请参阅下面的@anishpatel评论

  • 使用`cd"$(oracle | xargs -0 dirname)"`如果路径可能包含空格.-0标志将输入分为null而不是空格. (2认同)

Cfr*_*eak 9

cd `which oracle`
Run Code Online (Sandbox Code Playgroud)

注意那些是反引号(通常是美国键盘上左边1的键)