Come sincronizzare la cronologia dei comandi della sessione terminale in bash?


13

Ho provato a cercare i ~/.bash_historymiei comandi recenti durante una sessione terminale, ma non c'erano. Immagino che ciò sia dovuto al fatto che ho più sessioni terminali aperte.

C'è un modo in cui posso sincronizzare (es. Sync-push o sync-write-out) la cronologia dei comandi della sessione terminale corrente nel file bash_history (senza chiudere la sessione e perdere quell'ambiente)?

(Sarebbe remoto simile nell'idea a come il synccomando memorizza le modifiche del file system su alcuni sistemi.)

Immagino di poter impostare bash per preservare la cronologia di più sessioni, ma la capacità di inviare il buffer della cronologia corrente sarebbe comunque utile negli scenari in cui si sta lavorando su una nuova macchina e si è accidentalmente dimenticato di impostare bash nel modo desiderato .


Ho provato il history -a comando incorporato della shell, ma in qualche modo ora ottengo "permesso negato" sul .bash_historyfile, dopo quello.
n611x007,

Risposte:


19

Aggiungi questa linea a .bashrc:

export PROMPT_COMMAND="history -a; history -n"

Apri un nuovo terminale e controlla.

Spiegazione

  • history -a aggiunge nuove righe della cronologia al file della cronologia.
  • history -ndice bashdi leggere le righe che non vengono lette dal file cronologico all'elenco cronologico corrente della sessione.
  • PROMPT_COMMAND: il contenuto di questa variabile viene eseguito come comando normale prima del bashprompt show. Quindi ogni volta che esegui un comando, history -a; history -nviene eseguito e la bashcronologia viene sincronizzata.

Grazie! Non so perché mi è stato negato il permesso prima, ma con i nuovi terminali ora sembra funzionare come previsto! Immagino che dovrei normalmente essere in grado di usare anche history -aun terminale con bashrc non modificato.
n611x007,

quando uno deve iniziare a preoccuparsi delle conseguenze sulle prestazioni di questo? (Sto pensando a dispositivi di fascia bassa, non sono sicuro di quanto sia grande questo overhead.)
n611x007

1
Inoltre potresti già avere un comando rapido, in questo caso è meglio usareexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
Fabian

Se ${PROMPT_COMMAND}è vuoto, viene visualizzato un errore a causa del ;
comando

@ BorisDäppen ha ragione, ma questo è facilmente risoltoexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.