Bash

用於輸入 cd 的命令的輸出

  • July 15, 2016

我想獲取 which 命令的輸出,然後 cd 到父目錄。例如,假設我有以下內容:

which someprogram

帶輸出:

/home/me/somedirectory/someprogram

我想 cd 到 someprogram 所在的目錄:

cd /home/me/somedirectory

我想在一行中完成此操作。最優雅、最棘手、最簡單的方法是什麼?

使用dirname

cd "`dirname $(which program)`"

在 bash 中,我推薦type -pover whichwhich是一個外部命令,有時很棘手。您可以使用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)

引用自:https://unix.stackexchange.com/questions/25884