用于输入 cd 的命令的输出

用于输入 cd 的命令的输出

我想获取 which 命令的输出,并 cd 到父目录。例如,假设我有以下内容:

which someprogram

带输出:

/home/me/somedirectory/someprogram

我想 cd 到某个程序所在的目录:

cd /home/me/somedirectory

我想用一行来完成这个任务。最优雅、最棘手、最简短的方法是什么?

答案1

使用dirname

cd "`dirname $(which program)`"

答案2

在 bash 中,我推荐type -pover 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)。)

相关内容