linux - workdir - bash-如何將結果從which命令傳遞到cd




shell workdir (5)

我如何將結果從which命令傳遞到cd

這就是我想要做的:

which oracle | cd
cd < which oracle

但它們都不起作用。

有沒有辦法實現這一點(而不是複制/粘貼當然)?

編輯:第二個想法,此命令將失敗,因為目標文件不是文件夾/目錄

所以我正在思考並找出一個更好的方法來擺脫尾隨的“/ oracle”部分(sed或awk,甚至是Perl):)

編輯:好的,這就是我最終得到的:

cd `which oracle | sed 's/\/oracle//g'`

你不需要管道,你可以使用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 $(which oracle | xargs dirname)

編輯:注意包含空格的路徑,請參閱下面的@anishpatel評論


好的,這是一個使用正確引用的解決方案:

cd "$(dirname "$(which oracle)")"

避免反引號,它們的可讀性較差,並始終引用流程替換。


為了回答您編輯的問題,您可以使用dirname去除命令的名稱:

cd $(dirname `which oracle`)

cd `which oracle`

注意那些是反引號(通常是美國鍵盤上1左側的鍵)





cd