%2C%20!%24%3Ar%3Ar%20(exclama%C3%A7%C3%A3o%20d%C3%B3lar%20dois%20pontos%20r)%2C%20!%23%3At%20(exclama%C3%A7%C3%A3o%20hash%20dois%20pontos%20t)%20significa%20nos%20comandos%20bash%20abaixo%3F.png)
Eu tenho tentado instalar um pacote Nagios e me deparei com essas estranhas expansões do bash em um guiaaqui. 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
Responder1
Estes sãobash
palavras-chave de expansão de histórico. Eles selecionam uma linha do histórico do shell e reinserem (partes dela), possível após modificação. O site ao qual você criou um link 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. Deveria ser
tar zxvf !$:t
que seleciona a última parte da linha anterior ( !$
), que é o URL fornecido para wget
, e pega a parte do nome do arquivo ( :t
, para final - estritamente falando, é o que resta após o último separador de diretório, /
, que funciona bem com URLs).
Então
chown -R root:root !$:r:r
seleciona a última parte da linha anterior, elimina a extensão do arquivo ( :r
- estritamente falando, remove o que estiver depois do último .
, incluindo o .
) duas vezes, o que fornece o nome do diretório (assumindo que o tarball contém um diretório com o mesmo nome que o nome base do tarball ). Os chmod
comandos cd
e procedem da mesma maneira.