Enquanto eu usaria Resposta de BillThor , há uma resposta puramente bash:
$ ls /etc/pam.d/sudo
$ cd !$:h
Veja Interação com o histórico no manual bash
Eu freqüentemente tenho que fazer isso. Por exemplo:
$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd /etc/pam.d/ # Figure I should just go to the directory
Agora, existe uma maneira de obter o diretório do último argumento quando é um caminho de arquivo? O que eu espero é algo assim:
$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd $dir # <-- something that returns /etc/pam.d in this case
Estou perguntando por que tomei conhecimento recentemente da variável $_
que se tornou útil. Estava imaginando se há algum outro fu de linha de comando que possa ser útil.
Enquanto eu usaria Resposta de BillThor , há uma resposta puramente bash:
$ ls /etc/pam.d/sudo
$ cd !$:h
Veja Interação com o histórico no manual bash
O histórico bash é efetivamente um arquivo de texto listando os comandos executados anteriormente - ele não inclui nenhum metadado dizendo o que esses comandos estão fazendo e que tipo de parâmetros está sendo passado.
Então $ _ apenas contém o conteúdo após o último espaço.
Acho que a resposta é não, não há como fazer isso com o bash, você provavelmente precisaria de um shell personalizado.
Tente
$(dirname $_)
Isso lhe dará o diretório acima do que quer que tenha sido o último argumento. Retorna .
se não houver nenhum componente de diretório. Além disso, se o argumento for algo como /etc/pam.d/
, ele retornará /etc
.
Adicionar o seguinte ao seu arquivo .profile
permitirá que você faça o que quiser com o comando cdx
:
alias cdx='cd $(dirname $_)'
Tags command-line bash linux shell