Wenn Sie sich in PROMPT_COMMAND von bash einbinden, wird diese Funktion jedes Mal ausgeführt, wenn Sie eine neue Eingabeaufforderung erhalten. Es ist also eine angemessene Zeit, um zu überprüfen, ob Sie sich in einem Verzeichnis befinden, für das Sie einen benutzerdefinierten Verlauf wünschen. Die Funktion hat vier Hauptzweige:
- Wenn sich das aktuelle Verzeichnis (
$PWD
) nicht geändert hat, tun Sie nichts (return).
Wenn das PWD hat geändert, dann setzen wir eine lokale Funktion , deren einziger Zweck nach oben ist das „Custom - Verzeichnis“ Code in einem Ort , an Faktor. Sie möchten meine Testverzeichnisse durch Ihre eigenen ersetzen (getrennt durch |
).
- Wenn wir nicht in ein benutzerdefiniertes Verzeichnis gewechselt oder dieses verlassen haben, aktualisieren Sie einfach die Variable "Vorheriges Verzeichnis" und kehren Sie aus der Funktion zurück.
Da wir die Verzeichnisse geändert haben, aktualisieren Sie die Variable "Vorheriges Verzeichnis", speichern Sie den In-Memory-Verlauf in der HISTFILE und löschen Sie den In-Memory-Verlauf.
Wenn wir in ein benutzerdefiniertes Verzeichnis gewechselt haben , legen Sie HISTFILE als .bash_history
Datei im aktuellen Verzeichnis fest.
Andernfalls haben wir aus einem benutzerdefinierten Verzeichnis gewechselt. Setzen Sie daher HISTFILE auf das Standardverzeichnis zurück.
Da wir die Verlaufsdateien geändert haben, lesen Sie den vorherigen Verlauf zurück.
Um die Dinge in Gang zu bringen, legt das Skript den Wert PROMPT_COMMAND fest und speichert zwei Variablen für den internen Gebrauch (die Standard-HISTFILE und das "vorherige Verzeichnis").
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD