Come posso ottenere il Terminale per mantenere una cronologia separata per scheda / finestra?


13

Quando riavvio il mio Mac si chiude e salva correttamente i buffer per ogni scheda, poiché è di nuovo lì quando il computer si riavvia. Ma la cronologia dei comandi non è bufferizzata correttamente per finestra / scheda. Sono tutti lo stesso buffer.

Suppongo sia perché bash usa lo stesso ~/.bash_historyper tutti i terminali ma c'è un modo per evitare di migliorarlo? Per fare bash, o forse Terminale, memorizzarli separatamente?


Si prega di vedere questo post @ Server Fault, spiega come farlo.
Mutante,

Risposte:


7

Potresti fare qualcosa del genere nel tuo .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Questo creerà file cronologici separati nella tua home directory come .bash_history_ttys002. Quando si crea una nuova finestra del terminale, verrà utilizzato il file cronologico corrispondente al nome tty, che di solito sarà determinato semplicemente dall'ordine in cui si creano le finestre del terminale.


Grazie mille! Contrassegnando questo come risolto. Anche se dipende da come OSX carica i terminali, ho la sensazione che questo sia il più vicino che possiamo ottenere.
Robert Sköld,

È possibile anche questo per tab ??
Joshua Muheim,

Ogni scheda è un login tty separato, quindi dovrebbe funzionare.
Seth Noble

Il terminale ha esplicito supporto per questo tipo di comportamento: quando crea un nuovo terminale assegna al terminale un ID univoco e lo comunica alla sessione del terminale tramite la variabile di ambiente TERM_SESSION_ID. Quando ripristina un terminale per Riprendi ripristina anche lo stesso ID sessione in modo che i programmi possano utilizzarlo per associare lo stato arbitrario ai terminali ripristinati. Usalo come parte del nome del file anziché di tty.
Chris Page

@ChrisPage il problema è che la sessione è diversa ogni volta che si avvia una finestra / scheda. Quindi creerebbe storie separate e non le collegherà attraverso le sessioni.
Rene Wooller,

5

Ho implementato questo aggiungendo

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

al mio ~/.bash_profilefile. Ora quando chiudo il terminale e lo apro di nuovo, su ogni scheda viene ripristinata la cronologia dei comandi separata. Anche quando creo una nuova scheda, la cronologia predefinita viene inizializzata da.bash_history

Inoltre, per rendere l' Terminalapp in grado di preservare le schede aperte tra esci e riavvia, è necessario assicurarsi che l'opzione "close windows when quitting app" (on Yosemite)sia disabilitata in System Preferences -> General.


0

È possibile impostare un $ HISTFILE personalizzato per ciascuna istanza di Terminale.


C'è un modo per farlo automaticamente per ogni scheda / finestra Terminale? E assicurarsi che stia usando lo stesso $HISTFILEquando si avvia il backup del computer?
Robert Sköld,

1
Sì, è possibile farlo, ma come accederesti di nuovo? Dovresti manipolare manualmente i file per accedere ai file della cronologia precedente.
EmmEff,

@EmmEff Terminal ha esplicito supporto per questo tipo di comportamento: quando crea un nuovo terminale assegna al terminale un ID univoco e lo comunica alla sessione del terminale tramite la variabile di ambiente TERM_SESSION_ID. Quando ripristina un terminale per Riprendi ripristina anche lo stesso ID sessione in modo che i programmi possano utilizzarlo per associare lo stato arbitrario ai terminali ripristinati.
Chris Page
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.