No Bash, como posso obter o caminho do diretório do último argumento do comando anterior?

0

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.

    
por Belmin Fernandez 15.11.2011 / 02:53

3 respostas

2

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

    
por 15.11.2011 / 15:17
2

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.

    
por 15.11.2011 / 03:04
2

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 $_)' 
    
por 15.11.2011 / 03:15