%2C%20!%24%3Ar%3Ar%20(dos%20puntos%20de%20exclamaci%C3%B3n%20r)%2C%20!%23%3At%20(hash%20de%20exclamaci%C3%B3n%20dos%20puntos%20t)%20en%20los%20siguientes%20comandos%20bash%3F.png)
He estado intentando instalar un paquete de Nagios y me topé con estas extrañas expansiones de bash en una guía.aquí. ¿Alguien puede ayudarme a entender qué significan las expansiones? Un enlace wiki también sería útil para referencia 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
Respuesta1
Estos sonbash
palabras clave de expansión del historial. Seleccionan una línea del historial del shell y la reinsertan (partes de ella), posible después de la modificación. El sitio al que se vinculó hace un trabajo razonable al explicarlos, pero no los describe todos.
tar zxvf !#:t
en realidad no tiene sentido: !#
selecciona la línea escrita hasta el momento, pero eso es así tar zxvf
y no queremos reutilizar nada de eso. Debería ser
tar zxvf !$:t
que selecciona la última parte de la línea anterior ( !$
), que es la URL proporcionada a wget
, y toma la parte del nombre del archivo ( :t
, para la cola; estrictamente hablando, es lo que queda después del último separador de directorio, /
que funciona muy bien con las URL).
Entonces
chown -R root:root !$:r:r
selecciona la última parte de la línea anterior, elimina la extensión del archivo ( :r
en sentido estricto, elimina todo lo que está después del último .
, incluido el .
) dos veces, lo que proporciona el nombre del directorio (asumiendo que el tarball contiene un directorio con el mismo nombre que el nombre base del tarball). ). Los comandos chmod
y cd
proceden de la misma manera.