Quiero ejecutar algunos comandos pero no quiero almacenarlos en el historial de comandos. Para que nadie pueda buscarlo en el .bash_history
archivo.
¿Hay alguna forma de ejecutar comandos bash de esta manera?
Quiero ejecutar algunos comandos pero no quiero almacenarlos en el historial de comandos. Para que nadie pueda buscarlo en el .bash_history
archivo.
¿Hay alguna forma de ejecutar comandos bash de esta manera?
Respuestas:
Comience su comando con un espacio y no se incluirá en el historial.
Tenga en cuenta que esto requiere $HISTCONTROL
que se establezca la variable de entorno .
Verifique que el siguiente comando regrese ignorespace
o
ignoreboth
#> echo $HISTCONTROL
Para agregar la variable de entorno si falta, se puede agregar la siguiente línea al perfil bash. P.ej%HOME/.bashrc
export HISTCONTROL=ignorespace
Después de obtener el perfil nuevamente, no se escribirán en los comandos prefijos de espacio $HISTFILE
En cualquier sesión de Bash, configure el archivo de historial en / dev / null escribiendo:
export HISTFILE=/dev/null
Tenga en cuenta que, como se señaló en los comentarios, ¡esto no escribirá ningún comando en esa sesión en el historial!
Simplemente no te metas con el arduo trabajo del administrador de tu sistema, por favor;)
La solución de Doodad es más elegante. Simplemente desarme la variable: unset HISTFILE
(¡gracias!)
/dev/null
permisos establecidos en 0600 al cerrar sesión. En cambio yo solía unset HISTFILE
.
Una extensión de la respuesta de @John Doe y @ user3270492. Pero, esto parece funcionar para mí.
<your_secret_command>; history -d $((HISTCMD-1))
No debería ver la entrada del comando en su historial.
Aquí está la explicación ...
El 'historial -d' elimina la entrada mencionada del historial.
El HISTCMD almacena el número de comando del que se ejecutará a continuación. Entonces, (HISTCMD-1) se refiere al último comando ejecutado.
Eliminar una determinada línea del archivo de historial de Bash
Puede considerar usar un shell sin historial, como quizás
/bin/sh << END
your commands without history
END
(tal vez /bin/dash
o /bin/sash
podría ser más apropiado que /bin/sh
)
o incluso mejor usar la utilidad por lotes , por ejemplo
batch << EOB
your commands
EOB
La historia contendría sh
o batch
no es muy significativa
Puedes comenzar tu sesión con
export HISTFILE=/dev/null ;history -d $(history 1)
luego proceda con sus acciones furtivas. La configuración del archivo histórico /dev/null
se registrará en el archivo de historial, sin embargo, esta entrada se eliminará fácilmente y no se mostrarán rastros (al menos en el archivo de historial).
Además, esto no es permanente.
Como lo menciona Doodad en los comentarios , lo unset HISTFILE
hace muy bien, pero en caso de que también desee eliminar algo de historial, haga echo $HISTFILE
para obtener la ubicación del archivo de historial (generalmente ~/.bash_history
) unset HISTFILE
y edite ~/.bash_history
(o lo que sea que sea HISTFILE
, por supuesto, ahora es unset
así para que pueda ' No lo leas).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
¡Entonces has editado tu historial y el hecho de haberlo editado!
unset HISTFILE; echo TEST; history
le dará el comando echo TEST
como el anterior al último. Aunque después de finalizar la sesión y volver a conectarse, el historial no tiene esta entrada. Entonces diría que funciona :)
unset HISTFILE
no parece detener los comandos que se graban en el historial en la memoria, pero sí impide que se graben en el archivo $ HISTFILE. Así que supongo que todavía tiene su historial local en la memoria, pero ya no se está grabando en un archivo, ¡que es lo que puede desear! ;)
También puede usar el siguiente comando:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Creo que es un comando muy portátil.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
y ahora puede hacerlo de la siguiente manera:mysql -uroot -pSecretPassword ; forget
$s
y otras cosas en sed. function forget() { // put code here // }
Si está utilizando zsh puede ejecutar:
setopt histignorespace
Después de configurar esto, cada comando que comience con un espacio se excluirá del historial.
Puede utilizar los alias de .zshrc
convertir este encendido / apagado :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Hay varias formas de lograr esto. Esto establece el tamaño del archivo de historial en 0:
export HISTFILESIZE=0
Esto establece el archivo de historial en /dev/null
, deshabilitándolo efectivamente:
export HISTFILE=/dev/null
Para comandos individuales, puede anteponer el comando con un espacio y no se guardará en el archivo de historial. Tenga en cuenta que esto requiere que tenga el ignorespace
valor incluido en la $HISTCONTROL
variable de entorno (man bash y busque ignorespace
más detalles).
Solo necesitas ejecutar:
$ set +o history
Para ver más, ejecuta:
$ man set
set -x history
después, funciona.
Este comando puede ser útil. Esto no registrará el comando que se ejecuta
history -d $((HISTCMD-1)) && <Your Command Here>