Terminal de reemplazo! seguido de un número con un comando


12

Estoy muy confundido acerca de mi sesión de terminal ubuntu, parece reemplazar secciones en comandos que comienzan !seguidos de un número con comandos aparentemente aleatorios. Lo hace !87reemplazándolo por screen -ly también con !88y reemplazado por ls.

Cualquier idea de por qué está sucediendo esto sería muy apreciada.


Respuestas:


20

Esa es bashla expansión de la historia, por ejemplo

!87

vuelve a ejecutar el comando desde la línea del historial 87.

Encontrará la descripción de esta función en la man bashsección "EXPANSIÓN DE HISTORIA":

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

Entonces, para llamar rápidamente al último comando, haga !-1y para el quinto último comando !-5. Un sinónimo útil para !-1es !!: si llamó, por ejemplo, apt install somethingy olvidó el sudo, simplemente ejecute sudo !!y estará bien.

Solo la barra invertida ( \ ) y las comillas simples pueden citar el carácter de expansión del historial.

Para evitar la expansión del historial, debe escapar del signo de exclamación con una barra diagonal inversa ( \!) o utilizar comillas simples ( '!').


3
para pasar un literal !a sus comandos y evitar la expansión de la historia, necesitará comillas simples o escapar de ellos: foo '!87'o foo \!87. (las comillas dobles también realizarán la expansión de sus contenidos)
Quijotesco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.