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' $HISTFILEstackoverflow.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. Sizshes 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 histignorespaceen su~/.zshrchistignorespace. 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
dccomandos se escriban en el historial, agregue lo siguiente en su~/.zshrcarchivo: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 988Nota: 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 9883 veces en secuencia.Fuente
fuente
history -dno funciona en ZSH porque es solo un aliasfc -l 1y termina con unfc: event not found: -derror.