Para poder deshabilitar la expansión del historial en una línea de comando en particular, puede usar space
como el tercer carácter de $histchars
:
histchars='!^ '
Luego, si ingresa su comando con un espacio inicial, no se realizará la expansión del historial.
bash-4.3$ echo "#!/bin/bash"
bash: !/bin/bash: event not found
bash-4.3$ echo "#!/bin/bash"
#!/bin/bash
Sin embargo, tenga en cuenta que los espacios iniciales también se usan cuando $HISTCONTROL
contiene ignorespace
como una forma de decirle que bash
no registre una línea de comando en el historial.
Si desea ambas funciones de forma independiente, deberá elegir otro personaje como el tercer personaje de $histchars
. Desea uno que no afecte la forma en que se interpreta su comando. Algunas opciones:
- usando la barra invertida (
\
): \echo foo
funciona pero tiene el efecto secundario de deshabilitar los alias o las palabras clave.
- TAB: sin embargo, para insertarlo en la primera posición, debe presionar Ctrl+VTab.
si no le importa escribir dos teclas, se puede elegir cualquier personaje que normalmente no aparece en primera posición ( %
, @
, ?
, escoger su propio) y crea un alias de vacío para ello:
histchars='!^%'
alias %=
Luego ingrese ese carácter, espacio y su comando:
bash-4.3$ % echo !!
!!
(no podrá registrar un comando donde la sustitución del historial ha sido desactivada. Tenga en cuenta también que el tercer carácter predeterminado de $histchars
es #
para que la expansión del historial no se realice en los comentarios. Si lo cambia e ingresa comentarios en el pronto, debe tener en cuenta el hecho de que las secuencias! pueden expandirse allí).