bash – 如何pipe理从哪个命令到cd的结果
我怎么能从一个命令的结果pipe道cd ? 
这是我想要做的:
 which oracle | cd cd < which oracle 
但是他们都没有工作。
有没有办法做到这一点(而不是复制/粘贴当然)?
编辑:第二个想法,这个命令会失败,因为目标文件不是一个文件夹/目录 。
所以我正在思考和制定一个更好的方法来摆脱尾随的“/ oracle”部分(sed或awk,甚至Perl):)
编辑:好吧,这是我最后得到的:
 cd `which oracle | sed 's/\/oracle//g'` 
	
在命令需要标准input参数的情况下使用pipe道。 ( 更多关于这个 )。
 用cd命令不是这样的。 该目录是命令参数。 在这种情况下,您可以使用命令replace。 使用反引号或$(...)来评估命令,并将其存储到variables中。 
 path=`which oracle` echo $path # just for debug cd $path 
虽然可以用更简单的方式完成:
 cd `which oracle` 
或者如果你的path有特殊的字符
 cd "`which oracle`" 
要么
 cd $(which oracle) 
这相当于反引用符号,但build议(反引号可以与撇号混淆)
..但它看起来像你想要的:
 cd $(dirname $(which oracle)) 
(这表明你可以很容易地使用嵌套)
  $(...) (以及反引号)也适用于双引号string,这有助于结果最终可能包含空格。 
 cd "$(dirname "$(which oracle)")" 
(请注意,这两个输出都需要一组双引号。)
用dirname获取目录:
 cd $(which oracle | xargs dirname) 
编辑:当心含有空格的path,请参阅下面的@anishpatel注释
 cd `which oracle` 
请注意这些反引号(通常是美式键盘上左侧的键)
好的,这里使用正确的引用的解决scheme:
 cd "$(dirname "$(which oracle)")" 
避免反引号,他们不太可读,总是引用过程replace。
你不需要pipe道,你可以用Bash参数扩展来做你想做的事情!
更多提示:如果使用Bash,请使用“type -P”而不是外部的“which”命令。
 # test touch /ls chmod +x /ls cmd='ls' PATH=/:$PATH if cmdpath="$(type -P "$cmd")" && cmdpath="${cmdpath%/*}" ; then cd "${cmdpath:-/}" || { echo "Could not cd to: ${cmdpath:-/}"; exit 1; } else echo "No such program in PATH search directories: ${cmd}" exit 1 fi 
 为了响应你编辑的问题,你可以使用dirname去除命令的名字: 
 cd $(dirname `which oracle`) 
除了上面的好的答案之外,还有一点需要提的是, cd是一个shell内build的,除了像ls这样的命令之外的新进程运行在同一进程中。