Ich möchte einige Befehle ausführen, aber nicht im Befehlsverlauf speichern. Damit niemand in der Lage ist, es in der .bash_historyDatei zu suchen .
Gibt es eine Möglichkeit, Bash-Befehle auf diese Weise auszuführen?
Ich möchte einige Befehle ausführen, aber nicht im Befehlsverlauf speichern. Damit niemand in der Lage ist, es in der .bash_historyDatei zu suchen .
Gibt es eine Möglichkeit, Bash-Befehle auf diese Weise auszuführen?
Antworten:
Beginnen Sie Ihren Befehl mit einem Leerzeichen und es wird nicht in den Verlauf aufgenommen.
Beachten Sie, dass hierfür die Umgebungsvariable $HISTCONTROLfestgelegt werden muss.
Überprüfen Sie, ob der folgende Befehl ignorespaceoder
zurückgibtignoreboth
#> echo $HISTCONTROLUm die Umgebungsvariable hinzuzufügen, falls sie fehlt, kann die folgende Zeile zum Bash-Profil hinzugefügt werden. Z.B%HOME/.bashrc
export HISTCONTROL=ignorespaceNach dem erneuten Sourcing des Profils werden keine Befehle mit Leerzeichenpräfix geschrieben $HISTFILE
Setzen Sie in einer bestimmten Bash-Sitzung die Verlaufsdatei auf / dev / null, indem Sie Folgendes eingeben:
export HISTFILE=/dev/null
Beachten Sie, dass, wie in den Kommentaren erwähnt, keine Befehle in dieser Sitzung in den Verlauf geschrieben werden!
Leg dich bitte nicht mit der harten Arbeit deines Systemadministrators an;)
Doodads Lösung ist eleganter. Deaktivieren Sie einfach die Variable: unset HISTFILE(danke!)
/dev/nullBerechtigungen beim Abmelden auf 0600 festgelegt wurden. Stattdessen habe ich verwendet unset HISTFILE.
Eine Erweiterung der Antwort von @John Doe & @ user3270492. Aber das scheint für mich zu funktionieren.
<your_secret_command>; history -d $((HISTCMD-1))
Sie sollten den Eintrag des Befehls nicht in Ihrem Verlauf sehen.
Hier ist die Erklärung ..
Das 'history -d' löscht den genannten Eintrag aus dem Verlauf.
Das HISTCMD speichert die Befehlsnummer der nächsten auszuführenden. (HISTCMD-1) bezieht sich also auf den zuletzt ausgeführten Befehl.
Entfernen Sie eine bestimmte Zeile aus der Bash-Verlaufsdatei
Sie könnten in Betracht ziehen, eine Shell ohne Verlauf zu verwenden, wie vielleicht
/bin/sh << END
your commands without history
END
(vielleicht /bin/dashoder /bin/sashkönnte angemessener sein als /bin/sh)
oder noch besser das Batch- Dienstprogramm verwenden, z
batch << EOB
your commands
EOB
Die Geschichte würde dann enthalten shoder batchwas nicht sehr aussagekräftig ist
Sie können Ihre Sitzung mit beginnen
export HISTFILE=/dev/null ;history -d $(history 1)
Fahren Sie dann mit Ihren hinterhältigen Aktivitäten fort. Das Festlegen der Histdatei auf /dev/nullwird in der Verlaufsdatei protokolliert. Dieser Eintrag wird jedoch sofort gelöscht und es werden keine Spuren (zumindest in der Verlaufsdatei) angezeigt.
Auch dies ist nicht permanent.
Wie von Doodad in den Kommentaren erwähnt , unset HISTFILEfunktioniert dies gut, aber falls Sie auch einen Verlauf löschen möchten, müssen Sie echo $HISTFILE(normalerweise ~/.bash_history) den Speicherort der Verlaufsdatei abrufenunset HISTFILE und bearbeiten ~/.bash_history(oder was auch immer HISTFILEwar - natürlich ist es jetzt unsetso, dass Sie es können. ' t lies es).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Dann haben Sie Ihren Verlauf bearbeitet und die Tatsache, dass Sie ihn bearbeitet haben!
unset HISTFILE; echo TEST; historyGibt Ihnen den Befehl echo TESTwie der vorletzte. Obwohl der Verlauf nach Beendigung der Sitzung und erneuter Verbindung in der Tat nicht über diesen Eintrag verfügt. Also würde ich sagen, es funktioniert :)
unset HISTFILEscheint nicht zu verhindern, dass Befehle im Verlauf im Speicher aufgezeichnet werden, aber es verhindert, dass sie in einer beliebigen Datei $ HISTFILE aufgezeichnet werden. Ich denke, Sie haben Ihren lokalen Verlauf noch im Speicher, aber er wird nicht mehr in einer Datei aufgezeichnet, was Sie vielleicht wollen! ;)
Sie können auch den folgenden Befehl verwenden:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Ich denke, es ist ein sehr portabler Befehl.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"und jetzt können Sie es so etwas tun:mysql -uroot -pSecretPassword ; forget
$sund andere Dinge in sed ändern . function forget() { // put code here // }
Wenn Sie zsh verwenden , können Sie Folgendes ausführen:
setopt histignorespace
Nachdem dies festgelegt wurde, wird jeder Befehl, der mit einem Leerzeichen beginnt , aus dem Verlauf ausgeschlossen.
Sie können mit Aliasnamen in .zshrcdiese einzuschalten on / off :
# 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."'
Es gibt verschiedene Möglichkeiten, dies zu erreichen. Dadurch wird die Größe der Verlaufsdatei auf 0 gesetzt:
export HISTFILESIZE=0
Dadurch wird die Verlaufsdatei auf gesetzt /dev/nullund effektiv deaktiviert:
export HISTFILE=/dev/null
Bei einzelnen Befehlen können Sie dem Befehl ein Leerzeichen voranstellen, das nicht in der Verlaufsdatei gespeichert wird. Beachten Sie, dass hierfür der ignorespaceWert in der $HISTCONTROLUmgebungsvariablen enthalten sein muss (man bash und suchen Sie ignorespacenach weiteren Details).
Sie müssen nur ausführen:
$ set +o history
Um mehr zu sehen, führen Sie Folgendes aus:
$ man set
set -x historydanach den umgekehrten Befehl hinzufügen , funktioniert es.
Dieser Befehl kann nützlich sein. Dadurch wird der ausgeführte Befehl nicht aufgezeichnet
history -d $((HISTCMD-1)) && <Your Command Here>