Перейдіть до каталогу, де живе виконувана команда


2

Це фокус із командного рядка з книги "Продуктивний програміст":

pushd `which java`/..

Автор каже, що ця команда може тимчасово перейти до каталогу, де живе виконувана команда java .

Коли я вводив цю команду в Linux, Баш скаржився, що:

bash: pushd: /usr/bin/java/..: Not a directory

Я також намагався змінити каталог /usr/bin/java/..безпосередньо:

$ pushd /usr/bin/java/.. 
bash: pushd: /usr/bin/java/..: Not a directory

Чому я провалився? Чому не можна змінити каталог, використовуючи /..? Як змінити цю команду для виконання того ж завдання?


1
Java - це файл у цьому каталозі. Спробуйте використовувати dirname ...
Jeff Schaller

1
path/..залежить від шляху до каталогу (де '..' є посиланням на його батьків).
Скаперен

Відповіді:


5

Це не вдається, тому що /usr/bin/javaце файл, а не каталог.

Ви можете зробити:

cd "$(dirname "$(which java)")"

Або використовувати розширення параметрів у zsh:

cd "${"$(which java)"%/*}"

2
Дещо більш чистим рішенням для ZSH було бcd =java(:h)
тридцять
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.