Para poder desativar a expansão do histórico em uma linha de comando específica, você pode usar space
como o terceiro caractere de $histchars
:
histchars='!^ '
Em seguida, se você digitar seu comando com um espaço à esquerda, a expansão do histórico não será executada.
bash-4.3$ echo "#!/bin/bash"
bash: !/bin/bash: event not found
bash-4.3$ echo "#!/bin/bash"
#!/bin/bash
No entanto, observe que os espaços iniciais também são usados quando $HISTCONTROL
contém ignorespace
como uma maneira de informar bash
para não gravar uma linha de comando no histórico.
Se você quiser os dois recursos de maneira indecorosa, precisará escolher outro caractere como o terceiro caractere de $histchars
. Você quer um que não afete a maneira como seu comando é interpretado. Algumas opções:
- usando barra invertida (
\
): \echo foo
funciona, mas isso tem o efeito colateral de desativar aliases ou palavras-chave.
- TAB: para inseri-lo na primeira posição, você precisa pressionar Ctrl + V Tab .
-
Se você não se importar em digitar duas teclas, poderá escolher qualquer caractere que normalmente não apareça na primeira posição ( %
, @
, ?
, escolha a sua) e criar um alias vazio para isso:
histchars='!^%'
alias %=
Em seguida, insira esse caractere, espaço e seu comando:
bash-4.3$ % echo !!
!!
(você não poderá gravar um comando no qual a substituição do histórico foi desativada. Observe também que o terceiro caractere padrão de $histchars
é #
para que a expansão do histórico não seja feita nos comentários. mudá-lo, e você inserir comentários no prompt, você deve estar ciente do fato de que! seqüências podem ser expandidas lá).