我想获取 which 命令的输出,并 cd 到父目录。例如,假设我有以下内容:
which someprogram
带输出:
/home/me/somedirectory/someprogram
我想 cd 到某个程序所在的目录:
cd /home/me/somedirectory
我想用一行来完成这个任务。最优雅、最棘手、最简短的方法是什么?
答案1
使用dirname
:
cd "`dirname $(which program)`"
答案2
在 bash 中,我推荐type -p
over which
.which
是一个外部命令,有时很棘手。您可以使用sed
删除 Final 之后的所有内容/
,或使用特殊用途的dirname
实用程序。
cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"
在命令行上,如果您知道该目录不包含任何特殊字符(空格或\[?*
),则可以省略引号。您还可以使用反引号代替其中之一$(…)
(嵌套反引号很困难,在这里不值得)。
cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`
在 zsh 中,有更紧凑的语法。
cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}
(是的,最后一个是神秘的。它使用变量${VAR+TEXT}
的语法_
,其值=program
相当于$(whence -p program)
。)