Trong bash, tôi khuyên bạn nên type -phơn which. whichlà 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 dirnametiệ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ị =programtương đương với $(whence -p program).)
$()thay vì backticks:cd $(dirname $(which program))