GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, einen verzeichnisbewussten Bash-Verlauf zu haben?

Zunächst einmal könnte es einfacher sein, einfach Ihr Up zuzuordnen und Nach unten Tasten zu history-search-backward und history-search-forward beziehungsweise. Ab man bash :

   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
   history-search-backward
          Search backward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

Wenn dies aktiviert ist, beginnen Sie mit der Eingabe des Namens Ihres Befehls und drücken Sie dann Nach oben , werden nur die Befehle aus Ihrem Verlauf angezeigt, die mit dem beginnen, was Sie eingegeben haben. Auf diese Weise können Sie den gewünschten Befehl sehr schnell finden und müssen nicht mit verzeichnisspezifischen Verlaufsdateien herumhantieren. Geben Sie einfach s ein , dann Nach oben und nur Befehle, die mit s beginnen wird gefunden werden. Verwenden Sie fooba und nur die, die mit fooba beginnen wird gezeigt.

Um dies zu aktivieren, fügen Sie Ihrem ~/.inputrc die folgenden Zeilen hinzu Datei auf dem Server (abhängig von Ihrem Terminal-Emulator benötigen Sie möglicherweise ein etwas anderes Format. Sehen Sie sich meine Antwort hier an, wenn diese nicht funktioniert):

"\e[A": history-search-backward
"\e[B": history-search-forward

Das heißt, ja, es ist möglich, eine Verlaufsdatei pro Verzeichnis festzulegen. Fügen Sie diese Funktion Ihrem ~/.profile hinzu (nicht zu Ihrem ~/.bashrc da diese Datei standardmäßig nicht gelesen wird, wenn ssh verwendet wird um sich bei einem entfernten Rechner anzumelden):

 setHistFile(){
    targetDirs=("/home/terdon/foo" "/home/terdon/bar")
    for dir in "${targetDirs[@]}"; do
        if [[ "$dir" = "$PWD" ]]; then
            ## Set the history file name
            export HISTFILE="./.bash_history"
            ## clear current history
            history -c
            ## read history from the $HISTFILE
            history -r
            ## Exit the function
            return
        fi
    done
    ## This will be run if the PWD is not in
    ## the targetDirs array
    export HISTFILE="$HOME/.bash_history"
    ## Read the history (in case we are leaving
    ## one of the targetDirs)
    history -r
}

Und stellen Sie dann Ihre PROMPT_COMMAND ein Variable (dies ist ein Befehl, der jedes Mal ausgeführt wird, wenn ein Shell-Prompt angezeigt wird) dazu:

export PROMPT_COMMAND='setHistFile'

Ändern Sie den targetDirs Array in die Liste der Verzeichnisse, für die Sie eine eigene Verlaufsdatei haben möchten.


Linux
  1. Bash-Skripte beim Betreten eines Verzeichnisses ausführen?

  2. Ist es möglich, die eingebauten Befehle zu Bash zu verfolgen?

  3. Ist es möglich, ältere Versionen von Bash zu emulieren?

  4. Automatische Bereinigung des Bash-Verlaufs?

  5. Suchposition im Bash-Verlauf zurücksetzen

So verwenden Sie Bash-Verlaufsbefehle

Verlaufsbefehl in Linux (Bash-Verlauf)

Wie man in ein bestimmtes Verzeichnis ssh?

Fügen Sie dem Pfad ein Bash-Skript hinzu

Bash:Keine solche Datei oder Verzeichnis?

Wie führt man ein Bash-Skript aus?