2015-09-05 7 views
31

Una funzionalità apparentemente nuova in OS X El Capitan (10.11 Beta) is Bash sessions (Terminal sessions). Ora dispongo di una directory ~/.bash_sessions con file di cronologia e i miei inviluppi HISTFILE e HISTIGNORE vengono sovrascritti. Come posso disabilitare tutte queste funzionalità?Come disabilitare le sessioni di Bash in OS X El Capitan

+1

"... i miei ... HISTIGNORE vengono ignorati." Ne sei sicuro? '/ etc/bashrc_Apple_Terminal' non altera' HISTIGNORE' (non ha alcun riferimento). –

+1

* se l'opzione di shell'histappend' è abilitata, la cronologia per sessione è disabilitata per impostazione predefinita * – yckart

risposta

40

Se si avvia manualmente una nuova sessione di Bash (ad esempio bash -xl), è possibile vedere cosa viene eseguito all'accesso.

Vedrai la seguente riga nell'output:

.... 
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']' 

È possibile creare un file .bash_sessions_disable nella vostra home directory per disattivare questa funzionalità.

+0

Mi piace avere accesso a un po 'più di storia rispetto a prima, ma impone dei limiti su se stesso? Sembra che io abbia due o tre file per ogni chiamata del terminale da quando ho installato 10.11. Solo due megabyte al mese, ma ancora ... – WGroleau

+0

@WGroleau: Questa funzione non riguarda la quantità di cronologia, ma memorizza le cronologie dei comandi separate per ogni sessione terminale in modo che se si ripristinano i terminali con Riprendi le cronologie rimarranno separate -come erano quando li hai inizialmente creati Le normali variabili di shell 'HISTSIZE' e' HISTFILESIZE' si applicano ancora. In effetti, si consiglia di ingrandirne una o entrambe, poiché ogni sessione aggiunge la sua cronologia al file globale ~ ~/.bash_history' in modo che tutta la cronologia sia disponibile nei nuovi terminali. Vedi i commenti in '/ etc/bashrc_Apple_Terminal' per maggiori dettagli. –

+0

@WGroleau: Elimina automaticamente anche i file di sessione più vecchi di due settimane, una volta al giorno. –

22

Questo comportamento è definito in /etc/bashrc_Apple_Terminal. Contiene commenti di documentazione che descrivono cosa fa e come personalizzarlo.

È possibile disattivare la funzione di cronologia dei comandi per-terminale sessione impostando SHELL_SESSION_HISTORY=0 nello script ~/.bashrc, come descritto qui:

È possibile disattivare questo comportamento e condividere una singola storia impostando SHELL_SESSION_HISTORY a 0 Esistono alcune personalizzazioni utente comuni che organizzano la condivisione di nuovi comandi tra shell in esecuzione tramite manipolando la cronologia a ciascun prompt e in genere includono 'shopt -s histappend'; pertanto, se l'opzione di shell di histappend è abilitata per , la cronologia di sessione è disabilitata per impostazione predefinita. Si possibile attivare in modo esplicito impostando SHELL_SESSION_HISTORY a 1.

Si noti che, anche se è possibile disattivare l'intero meccanismo di ripristino dello stato sessione con la creazione di ~/.bash_sessions_disable, questo non è necessaria solo per disabilitare la funzione per sessione cronologia dei comandi, e non è raccomandato.

+1

Bella scoperta! Guardare attraverso '/ etc/bashrc_Apple_Terminal' mi porta a credere che l'unico modo per evitare del tutto la funzione sia di impostare' "$ HOME/.bash_sessions_disable" '(cioè senza quel file creerà comunque la directory delle sessioni). – Whymarrh

+0

@Whymarrh Hai perso parte della mia risposta? Ho detto che quel file disabilita il meccanismo dello stato di sessione, ma questo è eccessivo se tutto ciò che si vuole fare è disabilitare la cronologia dei comandi della shell per sessione. –

+1

Sembra che abbia letto male l'ultima riga, sì. Mi dispiace per quello – Whymarrh

6

Per riassumere, questo ha a che fare con la funzione Apple Resume. Quando questa funzione è abilitata, quando si chiude un'app o si riavvia, al successivo avvio dell'app si apriranno le finestre precedentemente aperte.

Per quanto riguarda i terminali, tre cose devono essere a posto per questo accada:

  1. $HOME/.bash_sessions_disable must non essere presente
  2. System Preferences/General/Close Windows when quitting an app deve non essere controllato.
  3. Al riavvio, selezionare Reopen windows.

Quando si riapre Terminale, si riaprono le stesse finestre e le stesse schede di prima nelle stesse posizioni dello schermo. Inoltre, se hai selezionato Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows, ripristinerà il testo su ogni schermata.

Infine, e questo si riferisce specificamente alla domanda del PO, si ripristinerà la storia di ogni finestra/scheda se le seguenti condizioni:

  1. SHELL_SESSION_HISTORY è impostato o impostato a 1
  2. shopt histappend non è set
  3. HISTTIMEFORMAT non è impostato

Se SHELL_SESSION_HISTORY è esplicitamente impostato su 1 in .bashrc, gli ultimi due requisiti vengono ignorati, ovvero è possibile impostare shopt histappend o HISTTIMEFORMAT.

Inoltre, è necessario prestare attenzione alle variabili HISTSIZE e HISTFILESIZE. Non dovrebbero essere troppo grandi o troppo piccoli, e alcuni consigliano di lasciarli disattivi in ​​modo che prendano i valori predefiniti di Apple.