Digamos que ejecuté un comando usando un zsh
echo "mysecret" > file
Puedo imprimir fácilmente el historial, incluidos los números de entrada, usando el comando fc -l
:
1 echo "mysecret" >| file
Pero, ¿cómo puedo eliminar fácilmente una entrada del historial?
No puedo encontrar un párrafo correspondiente en man zshbuiltins .
Respuestas:
* BSD / Darwin (macOS):
Linux (GNU sed):
Esto eliminará todas las líneas que coincidan con "pornografía" de su $ HISTFILE.
Con
setopt HIST_IGNORE_SPACE
, puede anteponer el comando anterior con un carácter de espacio para evitar que se escriba en $ HISTFILE.Como Tim señaló en su comentario a continuación , el prefijo LC_ALL = C evita la falla de la 'secuencia de bytes ilegal'.
fuente
sed -i '' '/S3_SECRET/d' $HISTFILE
. Esto no funcionará en Linux. stackoverflow.com/questions/5694228/…LC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE
stackoverflow.com/questions/11287564/…No sé si hay algún método elegante para hacer esto, pero en situaciones similares me desconecté (permitiendo que zsh vacíe su búfer y escriba mi historial en el archivo), luego inicié sesión y finalmente edité manualmente
~/.zsh_history
, eliminando el " peligrosa "línea.fuente
HISTFILE=/dev/null
, o simplemente use otro shell. Sizsh
es el shell de inicio de sesión, inicie sesión yexec sh
, luego, edite~/.zhistory
.~/.zsh_history
, luego reiniciar zsh.Si usa la opción HIST_IGNORE_SPACE en zsh, puede anteponer los comandos con un espacio "" y no se recordarán en el archivo de historial. Si tiene comandos secretos que usa comúnmente, puede hacer algo como: alias hiddencommand = 'hiddencommand' .
fuente
setopt histignorespace
en su~/.zshrc
histignorespace
. Muy útil !Esta función eliminará cualquier línea que desee de su historial de Zsh, sin hacer preguntas:
# Accepts one history line number as argument. # Alternatively, you can do `dc -1` to remove the last line. dc () { # Prevent the specified history line from being saved. local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}" # Write out the history to file, excluding lines that match `$HISTORY_IGNORE`. fc -W # Dispose of the current history and read the new history from file. fc -p $HISTFILE $HISTSIZE $SAVEHIST # TA-DA! print "Deleted '$HISTORY_IGNORE' from history." }
Si desea evitar además que todos los
dc
comandos se escriban en el historial, agregue lo siguiente en su~/.zshrc
archivo:zshaddhistory() { [[ $1 != 'dc '* ]] }
Actualizar
Ahora he publicado una solución más completa como complemento: https://github.com/marlonrichert/zsh-hist
fuente
En bash :
1- en tipo de terminal bash
hsitory
# Esto enumerará todos los comandos en el archivo histórico .bash_history con números de líneaex:
2- elige el número de línea de CMD que deseas eliminar
history -d 988
Nota: si desea eliminar, por ejemplo, los últimos 3 CMD, simplemente elija el número de la tercera línea de la parte inferior, por ejemplo: 988 y repita el CMD
history -d 988
3 veces en secuencia.Fuente
fuente
history -d
no funciona en ZSH porque es solo un aliasfc -l 1
y termina con unfc: event not found: -d
error.