Terminal substituindo! seguido por um número com um comando

12

Estou muito confuso sobre a minha sessão de terminal do Ubuntu, parece substituir seções em comandos que começam por ! seguido por um número com comandos aparentemente aleatórios. Ele faz isso com !87 substituindo-o por screen -l e também por !88 e o substituiu por ls .

Qualquer ideia de por que isso está acontecendo seria muito apreciada.

    
por usbpc102 15.11.2017 / 20:41

1 resposta

20

Essa é a expansão do histórico de bash , por exemplo,

!87

reexecuta o comando da linha de histórico 87 .

Você encontra a descrição desse recurso em man bash , seção “EXPANSÃO DA HISTÓRIA”:

       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.

Então, para chamar rapidamente o último comando, faça !-1 e, para o quinto último comando, !-5 . Um sinônimo útil para !-1 é !! - se você ligou por exemplo apt install something e esqueci o sudo , apenas execute sudo !! e você está bem.

  

Somente barra invertida ( \ ) e aspas simples podem citar o caractere de expansão do histórico.

Para evitar a expansão do histórico, você precisa escapar do ponto de exclamação com uma barra invertida ( \! ) ou usar aspas simples ( '!' ).

    
por dessert 15.11.2017 / 20:45