O que significa! # (exclamação hash),! $: r: r (exclamação cólon r),! #: t (exclamação hash cólon t) significa nos comandos abaixo bash?

3

Eu tenho tentado instalar um pacote Nagios e me deparei com essas expansões estranhas em um guia aqui . Alguém pode me ajudar a entender o que significam as expansões? Um link wiki também seria útil para referência futura.

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh
    
por deppfx 17.05.2016 / 20:59

1 resposta

5

Estas são bash palavras-chave de expansão do histórico . Eles selecionam uma linha do histórico da shell e reinserem (partes dela), possíveis após a modificação. O site que você vinculou faz um trabalho razoável explicando-os, mas não descreve todos eles.

tar zxvf !#:t

na verdade não faz sentido: !# seleciona a linha digitada até agora, mas isso é tar zxvf e não queremos reutilizar nada disso. Deve ser

tar zxvf !$:t

que seleciona a última parte da linha anterior ( !$ ), que é o URL dado a wget , e pega a parte do nome do arquivo ( :t , para tail - estritamente falando, é o que resta após o último diretório separador, / , que funciona bem com URLs).

Então

chown -R root:root !$:r:r

seleciona a última parte da linha anterior, descarta a extensão do arquivo ( :r - estritamente falando, remove qualquer coisa após o último . , incluindo o . ) duas vezes, o que dá o nome do diretório (assumindo o tarball contém um diretório com o mesmo nome que o nome base do tarball). Os comandos chmod e cd procedem da mesma maneira.

    
por 17.05.2016 / 23:05