Perché la cronologia di bash sul mio mac non salverà?


28

Ho sempre usato bash per lavoro e non ho mai avuto problemi con esso. Ora, non salva più alcun comando nella cronologia. Se apro un terminale di finestra, provo alcuni comandi, si comporta come se tutto avesse funzionato bene e mi mostrasse la cronologia usando i tasti freccia. Ma se chiudo la finestra (e che è il momento in cui dovrebbe essere salvato sul file .bash_history) e ne apro un altro, non ci sono segni degli ultimi comandi.

Come posso scoprire cosa non va? O reimpostare tutto da vuoto.


Potrebbe essere il tuo profilo o file rc. Cosa c'è dentro?
user14492

1
Quali sono le autorizzazioni e il proprietario sul tuo .bash_history? I miei sono 600 e sono di mia proprietà. Inoltre, cosa c'è in $ HIST_FILE?
blm

@blm Le autorizzazioni sono giuste; stampando $ HIST_FILE ho scoperto di .bash_sessions . Apparentemente ci sono problemi quando, al termine di una sessione, il sistema operativo salva tali file nel file cronologico. Non voglio più indagare, quindi ho semplicemente messo questo a casa mia .bash_sessions_disablee so che ritorna al comportamento predefinito
abaini01

Ti preghiamo di considerare di presentare una segnalazione di bug con Apple: developer.apple.com/bug-reporting
Pagina Chris

Risposte:


31

L'ho fatto:

Aggiungi una variabile al .bash_profilefile

SHELL_SESSION_HISTORY=0

riavviare il terminale e successivamente funziona come vorrei. (Ha salvato i comandi dopo aver chiuso il terminale)

PS Uso anche le variabili HISTFILESIZEeHISTSIZE

HISTSIZE è il numero di righe o comandi che sono archiviati in memoria in un elenco cronologico mentre la sessione bash è in corso.

HISTFILESIZE è il numero di righe o comandi che (a) sono consentiti nel file cronologico al momento dell'avvio di una sessione e (b) sono memorizzati nel file cronologico alla fine della sessione bash per l'uso in sessioni future.


3
Aggiungendo che una riga funziona bene per me su El Capitan, grazie.
Aidan,

2
Grazie! Mi piacerebbe sapere perché anche questo funziona, se qualcuno lo sa. (Storia = 0 implicherebbe per la mia mente ignorante che tutta la storia andrà persa, eppure sembra avere l'effetto opposto.)
Mike Williamson,

@Sysqa C'è qualche soluzione "nel mezzo"? La funzione che "salva e ripristina la cronologia dei comandi bash in modo indipendente per ogni sessione terminale ripristinata" suona come una bella funzionalità di cui alcuni programmi potrebbero beneficiare. C'è un modo per avere i vantaggi della configurazione precedente e anche quella nuova con un qualche tipo di configurazione?
loco.loop,

8

A partire da OS X 10.11 El Capitan , lo script installato dal sistema si /etc/bashrc_Apple_Terminalcoordina con Terminale per salvare / ripristinare cronologie di comandi separate per ciascun terminale ripristinato per Riprendi .

Leggi i commenti /etc/bashrc_Apple_Terminalper una spiegazione di come gestisce la cronologia dei comandi per terminale e di come personalizzarla.

Se personalizzi PROMPT_COMMANDassicurati di concatenare il valore precedente in modo da non cancellare il comando fornito dal sistema:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Se installi un EXITgestore di segnale trapassicurati di fare qualcosa di simile (o chiama shell_session_update dal tuo gestore se non riesci a capire come concatenare al valore precedente, è un po 'coinvolto).

Quando si esce dalla shell, questo codice salverà nuovi comandi nella cronologia del terminale in ~/.bash_sessions. Per vedere se riscontra qualche problema, invece di chiudere il terminale uscire manualmente dalla shell con exit(o Control-D). Registra i messaggi di avanzamento. Nota se non viene completato o se vengono visualizzati messaggi di avviso o di errore.

In generale, bashrc_Apple_Terminaltenta di rilevare e disabilitare la cronologia per sessione se sembra che l'utente abbia eseguito personalizzazioni non compatibili con essa. Sembra che tu possa averne trovato uno che non gestisce. Ti preghiamo di considerare di presentare una segnalazione di bug con Apple: https://developer.apple.com/bug-reporting/


Non ho fatto alcuna configurazione speciale quindi immagino che non sia il problema. Potresti spiegare cosa fa PROMPT_COMMAND.
loco.loop,

@ loco.loop Intendi "A cosa serve la variabile PROMPT_COMMAND di Bash?" o intendi "Per cosa /etc/bashrc_Apple_Terminalutilizza PROMPT_COMMAND?"? In quest'ultimo caso, ti rimando al codice, che è documentato in dettaglio. Oppure, dovresti iniziare un altro Q&A a riguardo.
Chris Page

Intendo cosa PROMPT_COMMAND per ... @ChrisPage
loco.loop

@ loco.loop Ti rimando alla documentazione di Bash o ti suggerisco di iniziare una domanda e risposta a riguardo.
Chris Page

6

Nel caso ce ne siano altri là fuori che hanno installato RVM (Ruby Version Manager): Verifica se hai la seguente riga nel tuo ~/.profile, ~/.bashrco ~/.bash_profilefile.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Probabilmente è RVM che impedisce l'uscita "hook" per l'esecuzione di bash_sessions.

Questo è stato il problema per me. Prova a commentarlo.

Fonte: Reddit


3

Su una nuova installazione di Mac OS X (aggiornata alla 10.13.6), la cronologia dei comandi bash non veniva salvata. Non c'erano anche file .bashrc o .bash_profile. In questo caso, l'aggiunta di un file .bashrc vuoto lo ha risolto per me.

touch .bashrc

Questo sembra essere tutto ciò di cui hai bisogno ...


sembra risolvere anche il problema su Mojave / 10.14 :-)
ssc

3

Ho avuto lo stesso problema con un osx Mojave appena installato. Ho controllato il mio ~/.bash_historyfile e ho visto questo:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Semplicemente ricambiarlo per gelarlo ha risolto il problema. Ero solito:

sudo chown gilm /Users/gilm/.bash_history

e questo ha risolto il mio problema.


2

È inoltre possibile creare un .bash_logoutfile con il seguente:

shell_session_update

Fonte del commento di GitHub


In alternativa, digitare manualmente trap shell_session_update EXITuna volta e disconnettersi. Ci sono indizi nello /etc/bashrc_Apple_Terminalscript che sono troppo noiosi per essere inclusi qui.
MarkHu,
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.