Ejecutar comando sin mantenerlo en el historial [cerrado]


203

Quiero ejecutar algunos comandos pero no quiero almacenarlos en el historial de comandos. Para que nadie pueda buscarlo en el .bash_historyarchivo.

¿Hay alguna forma de ejecutar comandos bash de esta manera?


13
Esta pregunta probablemente debería trasladarse a ServerFault, ya que no se trata de "programación" tanto como de "administrador de servidor", pero gracias por la pregunta / respuesta, ¡exactamente lo que necesitaba!
Andrew Theken

Respuestas:


294

Comience su comando con un espacio y no se incluirá en el historial.

Tenga en cuenta que esto requiere $HISTCONTROLque se establezca la variable de entorno .

  • Verifique que el siguiente comando regrese ignorespaceo 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


20
Esto no funciona a menos que se incluya ignorespace en $ HISTCONTROL, aunque este es probablemente el valor predeterminado en la mayoría de los sistemas.
pgl

2
Correcto. Para más detalles, el OP debe echar un vistazo a HISTCONTROL e HISTIGNORE en la página de manual de bash.
u-punkt

2
thegeekstuff.com/2008/08/… - más consejos sobre el historial de bash están disponibles aquí, incluido este método de ocultar comandos del historial
user379997 12/12/11

52

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!)


55
Esto evitará que todos los comandos se registren. No es lo que quiere el interrogador.
Noufal Ibrahim

12
Esto me causó problemas relacionados con los /dev/nullpermisos establecidos en 0600 al cerrar sesión. En cambio yo solía unset HISTFILE.
Doodad


21

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


Lamentablemente esto no funcionó para mí.
Magick

10

Puede considerar usar un shell sin historial, como quizás

/bin/sh << END
   your commands without history
END

(tal vez /bin/dasho /bin/sashpodrí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 sho batchno es muy significativa


8

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/nullse 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.


Esto ya fue contestado muchas veces. ¿Qué diría que su respuesta agrega a este hilo (a excepción del ruido inútil)?
gniourf_gniourf

No se compiló en una sola respuesta , para que el comando en sí no aparezca en el historial y no se muestre nada que se ingrese después.
Christian el

1
¡Pero ahora este hilo es un verdadero desastre! en este caso, especialmente para una pregunta tan antigua, creo que es mejor que edite buenas respuestas ya existentes y / o deje un comentario ...
gniourf_gniourf

5

Como lo menciona Doodad en los comentarios , lo unset HISTFILEhace muy bien, pero en caso de que también desee eliminar algo de historial, haga echo $HISTFILEpara obtener la ubicación del archivo de historial (generalmente ~/.bash_history) unset HISTFILEy edite ~/.bash_history(o lo que sea que sea HISTFILE, por supuesto, ahora es unsetasí 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!


Intenté esto en: GNU bash, versión 3.2.57 (1) -release (x86_64-apple-darwin15) y no funciona. Los comandos que utilicé después de HISTORY sin configurar se almacenaron en ~ / .bash_history
Krystian

@Krystian Mi error: había escrito "HISTORIAL sin configurar" cuando debería ser "HISTFILE sin configurar" - corregido. ¿Funciona ahora? Funciona en GNU bash, versión 4.3.30 (1) -release (x86_64-pc-linux-gnu).
drkvogel

bueno no estoy seguro. Prueba simple: unset HISTFILE; echo TEST; historyle dará el comando echo TESTcomo 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 :)
Krystian

unset HISTFILEno 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! ;)
drkvogel

4

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.


He creado un alias a partir de esto: 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
sobi3ch

1
Lo sentimos, pero me doy cuenta de que debe crear una función en lugar de un alias debido a que las comillas cambian el significado de $sy otras cosas en sed. function forget() { // put code here // }
sobi3ch

3

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 .zshrcconvertir 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."'

Bien, pero esta pregunta está etiquetada específicamente como bash
tripleee

2

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 ignorespacevalor incluido en la $HISTCONTROLvariable de entorno (man bash y busque ignorespacemás detalles).


2
Esto evitará que todos los comandos se registren. No es lo que quiere el interrogador.
Noufal Ibrahim

Bueno, supuse que el interlocutor restablecería los valores después de hacer lo que quisiera que no debería registrarse.
pgl

1

¡Esto es útil si desea borrar todo el historial, incluido el hecho de que borró todo el historial!

rm .bash_history;export HISTFILE=/dev/null;exit

0

Solo necesitas ejecutar:
$ set +o history

Para ver más, ejecuta:
$ man set


2
Esto deshabilita el historial para todos los comandos futuros, no para un comando individual. La mayoría de las personas que vienen aquí deberían mirar la respuesta aceptada.
tripleee

Esto es válido o está bien pero está incompleto. Siempre que agreguemos el comando de reversa set -x historydespués, funciona.
Abdillah

0

Este comando puede ser útil. Esto no registrará el comando que se ejecuta

history -d $((HISTCMD-1)) && <Your Command Here>
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.