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
risposta
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à.
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
@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. –
@WGroleau: Elimina automaticamente anche i file di sessione più vecchi di due settimane, una volta al giorno. –
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.
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
@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. –
Sembra che abbia letto male l'ultima riga, sì. Mi dispiace per quello – Whymarrh
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:
$HOME/.bash_sessions_disable
must non essere presenteSystem Preferences/General/Close Windows when quitting an app
deve non essere controllato.- 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:
SHELL_SESSION_HISTORY
è impostato o impostato a 1shopt histappend
non è setHISTTIMEFORMAT
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.
"... i miei ... HISTIGNORE vengono ignorati." Ne sei sicuro? '/ etc/bashrc_Apple_Terminal' non altera' HISTIGNORE' (non ha alcun riferimento). –
* se l'opzione di shell'histappend' è abilitata, la cronologia per sessione è disabilitata per impostazione predefinita * – yckart