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
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!)
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).
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')
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).
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
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
oignoreboth
Para agregar la variable de entorno si falta, se puede agregar la siguiente línea al perfil bash. P.ej
%HOME/.bashrc
Después de obtener el perfil nuevamente, no se escribirán en los comandos prefijos de espacio
$HISTFILE
fuente
En cualquier sesión de Bash, configure el archivo de historial en / dev / null escribiendo:
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!)fuente
/dev/null
permisos establecidos en 0600 al cerrar sesión. En cambio yo solíaunset HISTFILE
.fuente
Una extensión de la respuesta de @John Doe y @ user3270492. Pero, esto parece funcionar para mí.
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
fuente
Puede considerar usar un shell sin historial, como quizás
(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
La historia contendría
sh
obatch
no es muy significativafuente
Puedes comenzar tu sesión con
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.
fuente
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, hagaecho $HISTFILE
para obtener la ubicación del archivo de historial (generalmente~/.bash_history
)unset HISTFILE
y edite~/.bash_history
(o lo que sea que seaHISTFILE
, por supuesto, ahora esunset
así para que pueda ' No lo leas).¡Entonces has editado tu historial y el hecho de haberlo editado!
fuente
unset HISTFILE; echo TEST; history
le dará el comandoecho 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:
Creo que es un comando muy portátil.
fuente
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:
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 :fuente
Hay varias formas de lograr esto. Esto establece el tamaño del archivo de historial en 0:
Esto establece el archivo de historial en
/dev/null
, deshabilitándolo efectivamente: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 busqueignorespace
más detalles).fuente
¡Esto es útil si desea borrar todo el historial, incluido el hecho de que borró todo el historial!
fuente
Solo necesitas ejecutar:
$ set +o history
Para ver más, ejecuta:
$ man set
fuente
set -x history
después, funciona.Este comando puede ser útil. Esto no registrará el comando que se ejecuta
fuente