Come far ricordare a bash (Terminal.app) la cronologia delle sessioni precedenti?


11

Nel mio computer al lavoro, la mia shell bash ricorda la cronologia delle sessioni precedenti, anche se ho appena aperto un nuovo terminale.
Nel mio computer a casa, questo non succede.
Ho lo stesso sistema operativo 10.6.8 in entrambe le macchine e non ho alcuna impostazione relativa alla cronologia .bash_profile.
Come ho potuto impostare questo sul mio computer di casa in modo che ricordi la cronologia attraverso le sessioni?



Risposte:


11

Dovrai dire a bash dove conservare il file della cronologia e quante righe mantenere:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
Tutto ciò non dovrebbe essere necessario per impostazione predefinita. La configurazione predefinita di bash (almeno su Mac OS X) abilita la cronologia dei comandi.
Chris Page

Parola chiave, / dovrebbe /. Se il suo non sta registrando la cronologia, questo costringerà Bash a mantenere la cronologia su init.
Lago Aaron

2
Non semplicemente dovrebbe , ma lo farà a meno che non sia stato fatto qualcosa per sopprimere il comportamento della cronologia di default, nel qual caso, semplicemente sbattere alcuni valori in queste variabili significa semplicemente documentare il problema reale. Se questa risposta risolve il problema, allora qualcos'altro è davvero incasinato e dovrebbe essere risolto per evitare altri problemi.
Chris Pagina

È possibile configurare queste impostazioni, ma ho trovato una soluzione / risposta più semplice se si desidera solo "abilitare" la cronologia sul terminale. Ha funzionato bene per me apple.stackexchange.com/a/220667/243988 (sto usando macOS High Sierra)
jpruizs,

4

Ho appena scoperto di avere un problema simile, anche se il mio datore di lavoro ha solo due Mac e nessuno dei due si siede sulla mia scrivania. Inaccettabile, ma una battaglia per un'altra volta.

In ogni caso, a casa, Mac Mini (migrato da MacBook Pro) non ha collaborato anche dopo l'impostazione .bashrce / o .profile. Poi ho scoperto che il mio ~/.bash_historyfile era misteriosamente di proprietà di root. Ho dovuto fare questo:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Sì, lo so che può essere fatto con meno comandi. Abitudine.)

Quindi sono uscito dal Terminal e ne ho avviato uno nuovo. Woot! Tutti i tipi di storia precedentemente persi tornarono di corsa. Che bello

È probabile che chiunque legga questo messaggio si sia accidentalmente messo in questa situazione: 0,2%. Sono sicuro di aver rovinato tutto quando "zelantemente" aggiustavo qualcos'altro.


4

Ho avuto questo problema e ciò che ha funzionato per me è stato creare un file chiamato .bash_sessions_disablenella mia cartella utente ( ~/).

Fondamentalmente OS X crea file di cronologia nella .bash_sessionscartella per ogni sessione (nel mio caso, uno per ogni scheda). E anche chiudendo correttamente queste sessioni, OS X non riproduce la cronologia .bash_history.

Creando .bash_sessions_disablesi disabilita questo comportamento.

touch ~/.bash_sessions_disable

La disabilitazione della cronologia dei comandi per sessione, il comportamento predefinito, è l'opposto di quanto richiesto.
Chris Page

@ChrisPage Questo è corretto solo se l'interrogante sta chiedendo storie per sessione, il che non sembra essere il caso ("ricorda la cronologia attraverso le sessioni"). Disabilitare il comportamento della sessione bash ABILITA la riproduzione di una singola cronologia .bash_historyanziché mantenere la cronologia nella .bash_sessions/cartella. Questa è la risposta corretta imho.
Matt H

@MattH La domanda chiede come ripristinare la cronologia, perché sembra non funzionare affatto e la disabilitazione di questa funzionalità della cronologia per sessione non sta andando nella giusta direzione. Se c'è un bug nel meccanismo della cronologia per sessione, qualcuno dovrebbe presentare una segnalazione di bug, ma presentare una risposta come se la disattivazione fosse in qualche modo generalmente corretta per tutti gli utenti è ... errata. Normalmente funziona bene. Vedi i miei commenti sulle varie risposte per ulteriori informazioni.
Chris Page

Avrei dovuto menzionarlo anche quando ho commentato inizialmente: la disabilitazione dell'intero meccanismo di salvataggio / ripristino di bash è intesa come ultima risorsa e, se possibile, dovrebbe essere evitata. È possibile semplicemente disattivare il comportamento della cronologia dei comandi per sessione impostando SHELL_SESSION_HISTORYsu 0, come documentato in /etc/bashrc_Apple_Terminal.
Chris Page

1

Questa risposta da questo thread di Reddit mi ha salvato:

Probabilmente è RVM che impedisce l'uscita "hook" per l'esecuzione di bash_sessions. Se scrivi la seguente riga nel tuo .bash_profile, dovrebbe funzionare.

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

0

Ho avuto anche un problema simile, nessuna storia registrata. Le soluzioni fornite non hanno funzionato, ma alla fine ho scoperto che il problema era semplice come un .bash_history mancante

La soluzione era andare su /home/[username]/e aggiungere un file .bash_history, quindi

nano .bash_history

e quindi digita qualsiasi cosa nel file (altrimenti non verrà creato), esci e salva. Dopo questo la storia ha iniziato a funzionare normalmente.


Se questo risolve il problema, allora qualcos'altro è sbagliato e dovrebbe essere riparato per evitare altri problemi. Se avvii Bash quando non è presente alcun file di cronologia, ne verrà creato uno. Se non tenta di crearne uno o non è in grado di crearlo, c'è qualcosa di sbagliato in alcuni script di avvio della shell o nelle autorizzazioni della directory home. Ad esempio, vedi la risposta: apple.stackexchange.com/a/118764/6883
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.