Мне часто приходится это делать. Например:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd /etc/pam.d/  # Figure I should just go to the directory

Теперь, как я могу получить каталог последнего аргумента, когда это путь к файлу? Я надеюсь, что-то вроде этого:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd $dir # <-- something that returns /etc/pam.d in this case

Я спрашиваю об этом, потому что недавно мне стало известно о переменной $_ , которая стала полезной. Интересно, есть ли какой-нибудь другой командный фу, который может пригодиться.

3 ответа3

2

Хотя я бы воспользовался ответом BillThor , есть ответ от bash:

$ ls /etc/pam.d/sudo
$ cd !$:h

Смотрите историю взаимодействия в руководстве bash

2

История bash - это, по сути, текстовый файл со списком ранее выполненных команд - он не содержит метаданных о том, что делают эти команды и какие параметры передаются.

Таким образом, $ _ содержит содержимое после последнего пробела.

Я думаю, что ответ «нет», нет никакого способа сделать это с помощью bash, вам, вероятно, понадобится пользовательская оболочка.

2

Пытаться

 $(dirname $_)

Это даст вам каталог выше, чем бы ни был последний аргумент. . если нет компонента каталога. Также, если аргумент был чем-то вроде /etc/pam.d/ , он вернет /etc

Добавление следующего в ваш файл .profile позволит вам делать то, что вы хотите, с помощью команды cdx:

alias cdx='cd $(dirname $_)' 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .