Bash
用於輸入 cd 的命令的輸出
我想獲取 which 命令的輸出,然後 cd 到父目錄。例如,假設我有以下內容:
which someprogram
帶輸出:
/home/me/somedirectory/someprogram
我想 cd 到 someprogram 所在的目錄:
cd /home/me/somedirectory
我想在一行中完成此操作。最優雅、最棘手、最簡單的方法是什麼?
使用
dirname
:cd "`dirname $(which program)`"
在 bash 中,我推薦
type -p
overwhich
。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)