GNU/Linux >> Linux Esercitazione >  >> Linux

È possibile avere una cronologia bash consapevole della directory

Prima di tutto, potrebbe essere più semplice mappare semplicemente il tuo Up e Giù pulsanti a history-search-backward e history-search-forward rispettivamente. Da 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.

Con questo abilitato, inizia a digitare il nome del tuo comando e poi premi Su , verranno mostrati solo i comandi della tua cronologia che iniziano con ciò che hai digitato. In questo modo, puoi trovare molto rapidamente il comando che ti interessa e non è necessario giocherellare con i file di cronologia specifici della directory. Basta digitare s , quindi Su e solo i comandi che iniziano con s sarà trovato. Usa fooba e solo quelli che iniziano con fooba sarà mostrato.

Per abilitarlo, aggiungi le seguenti righe al tuo ~/.inputrc file sul server (a seconda del tuo emulatore di terminale, potresti aver bisogno di un formato leggermente diverso. Dai un'occhiata alla mia risposta qui se questo non funziona):

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

Detto questo, sì, è possibile impostare un file di cronologia per directory. Aggiungi questa funzione al tuo ~/.profile (non al tuo ~/.bashrc poiché questo file non viene letto per impostazione predefinita quando si utilizza ssh per accedere a una macchina remota):

 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
}

E poi imposta il tuo PROMPT_COMMAND variabile (questo è un comando che viene eseguito ogni volta che viene mostrato un prompt della shell) ad esso:

export PROMPT_COMMAND='setHistFile'

Cambia il targetDirs array all'elenco delle directory in cui si desidera avere il proprio file di cronologia.


Linux
  1. Come cancellare la cronologia di Bash su Linux

  2. Analisi della cronologia di Bash in Linux

  3. Eseguire script Bash all'ingresso di una directory?

  4. È possibile tracciare i comandi integrati su Bash?

  5. Perché non posso usare Cd in uno script Bash??

Comando della cronologia in Linux (Cronologia di Bash)

È possibile emulare versioni precedenti di Bash?

Pulizia automatica della cronologia di Bash?

Aggiungi uno script bash al percorso

Reimposta la posizione di ricerca della cronologia di bash

Torna alla directory precedente nella shell