Angenommen, ich habe einen Befehl mit einem zsh ausgeführt
echo "mysecret" > file
Ich kann den Verlauf einschließlich der Eintragsnummern einfach mit dem folgenden Befehl drucken fc -l
:
1 echo "mysecret" >| file
Aber wie kann ich einen Eintrag einfach aus dem Verlauf löschen?
Ich kann keinen entsprechenden Absatz in man zshbuiltins finden .
Antworten:
* BSD / Darwin (macOS):
Linux (GNU sed):
Dadurch werden alle Zeilen, die mit "porn" übereinstimmen, aus Ihrer $ HISTFILE entfernt.
Mit
setopt HIST_IGNORE_SPACE
können Sie dem obigen Befehl ein Leerzeichen voranstellen, um zu verhindern, dass er in $ HISTFILE geschrieben wird.Wie Tim in seinem Kommentar unten hervorhob, verhindert das Präfix LC_ALL = C einen Fehler der "illegalen Byte-Sequenz".
quelle
sed -i '' '/S3_SECRET/d' $HISTFILE
. Dies funktioniert nicht unter Linux. stackoverflow.com/questions/5694228/…LC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE
stackoverflow.com/questions/11287564/…Ich weiß nicht, ob es dafür eine elegante Methode gibt, aber in ähnlichen Situationen habe ich mich abgemeldet (damit zsh seinen Puffer leeren und meinen Verlauf in eine Datei schreiben kann), mich angemeldet und schließlich manuell bearbeitet
~/.zsh_history
und das " gefährliche "Linie.quelle
HISTFILE=/dev/null
, oder verwenden Sie einfach eine andere Shell. Wennzsh
es sich um die Login-Shell handelt, melden Sie sich an undexec sh
bearbeiten Sie sie~/.zhistory
.~/.zsh_history
, dann zsh neu starten.Wenn Sie die Option HIST_IGNORE_SPACE in zsh verwenden, können Sie Befehlen ein Leerzeichen "" voranstellen, das in der Verlaufsdatei nicht gespeichert wird. Wenn Sie geheime Befehle haben, die Sie häufig verwenden, können Sie Folgendes tun: alias hiddencommand = 'hiddencommand' .
quelle
setopt histignorespace
in Ihrem~/.zshrc
histignorespace
. Sehr hilfreich !Diese Funktion entfernt jede gewünschte Zeile aus Ihrem Zsh-Verlauf, ohne dass Fragen gestellt werden:
# 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." }
Wenn Sie zusätzlich verhindern möchten, dass alle
dc
Befehle in den Verlauf geschrieben werden, fügen Sie Folgendes in Ihre~/.zshrc
Datei ein:zshaddhistory() { [[ $1 != 'dc '* ]] }
Aktualisieren
Ich habe jetzt eine umfassendere Lösung als Plugin veröffentlicht: https://github.com/marlonrichert/zsh-hist
quelle
In Bash :
1- in Bash-Terminal-Typ
hsitory
# Dadurch werden alle Befehle in der Verlaufsdatei .bash_history mit Zeilennummern aufgelistetEx:
2- Wählen Sie die CMD-Zeilennummer aus, die Sie löschen möchten
history -d 988
Hinweis: Wenn Sie beispielsweise die letzten 3 CMDs löschen möchten, wählen Sie einfach die dritte Zeilennummer von unten aus, z. B. 988, und wiederholen Sie die CMD
history -d 988
dreimal hintereinander.Quelle
quelle
history -d
funktioniert nicht in ZSH, da es nur ein Alias für istfc -l 1
und mit einemfc: event not found: -d
Fehler endet .