Trong bash, tôi khuyên bạn nên type -p
hơn which
. which
là một lệnh bên ngoài và đôi khi nó khó khăn . Bạn có thể sử dụng sed
để xóa mọi thứ sau trận chung kết /
hoặc sử dụng dirname
tiện ích cho mục đích đặc biệt .
cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"
Trên dòng lệnh, nếu bạn biết rằng thư mục không chứa bất kỳ ký tự đặc biệt nào (khoảng trắng hoặc \[?*
), bạn có thể bỏ qua dấu ngoặc kép. Bạn cũng có thể sử dụng backquote thay vì một trong những $(…)
(backquote lồng nhau là khó khăn, không có giá trị ở đây).
cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`
Trong zsh, có một cú pháp nhỏ gọn hơn.
cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}
(Vâng, cái cuối cùng là mật mã. Nó sử dụng ${VAR+TEXT}
cú pháp trên _
biến, với giá trị =program
tương đương với $(whence -p program)
.)
$()
thay vì backticks:cd $(dirname $(which program))