Comment faire en sorte que bash (Terminal.app) se souvienne de l'historique des sessions précédentes?

11

Sur mon ordinateur au travail, mon shell bash se souvient de l'historique des sessions précédentes, même si je venais d'ouvrir un nouveau terminal.
Dans mon ordinateur à la maison, cela ne se produit pas.
J'ai le même OS 10.6.8 sur les deux machines et je n'ai aucun paramètre lié à l'historique dans .bash_profile.
Comment pourrais-je configurer cela sur mon ordinateur personnel pour qu'il se souvienne de l'historique des sessions?

Petruza
la source
Également demandé sur superuser.com/q/421544/4714
glenn jackman

Réponses:

11

Vous devrez indiquer à bash où conserver votre fichier d'historique et combien de lignes conserver:

# 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
Lac Aaron
la source
3
Cela devrait être inutile par défaut. La configuration bash par défaut (au moins sur Mac OS X) active l'historique des commandes.
Chris Page
Mot clé, / devrait /. S'il n'enregistre pas l'historique, cela forcera bash à conserver l'historique sur init.
Aaron Lake
2
Non seulement devrait , mais le fera à moins que quelque chose n'ait été fait pour supprimer le comportement d'historique par défaut, auquel cas, le simple fait de claquer certaines valeurs dans ces variables revient simplement à résoudre le problème réel. Si cette réponse résout le problème, alors quelque chose d'autre est vraiment foiré et devrait être corrigé pour éviter d'autres problèmes.
Chris Page
Vous pouvez configurer ces paramètres, mais j'ai trouvé une solution / réponse plus simple si vous voulez simplement "activer" l'historique sur le terminal. Cela a bien fonctionné pour moi apple.stackexchange.com/a/220667/243988 (j'utilise macOS High Sierra)
jpruizs
4

Je viens de découvrir que j'avais un problème similaire, bien que mon employeur n'ait que deux Mac et qu'aucun ne soit assis sur mon bureau. Inacceptable, mais une bataille pour une autre fois.

Quoi qu'il en soit, à la maison, Mac Mini (migré de MacBook Pro) n'a pas coopéré même après la configuration .bashrcet / ou .profile. Ensuite, j'ai découvert que mon ~/.bash_historyfichier appartenait mystérieusement à root. J'ai dû faire ceci:

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

(Oui, je sais que cela peut être fait en moins de commandes. Habit.)

Ensuite, j'ai quitté Terminal et j'en ai démarré un nouveau. Woot! Toutes sortes d'histoires précédemment perdues reviennent précipitamment. Comme c'est gentil.

Probabilité qu'une personne lisant ceci se mette accidentellement dans cette situation: 0,2%. Je suis sûr que j'ai foiré ça quand je «réparais» avec trop de zèle quelque chose d'autre.

kelvin0mql
la source
4

J'ai eu ce problème et ce qui a fonctionné pour moi a été de créer un fichier appelé .bash_sessions_disabledans mon dossier utilisateur ( ~/).

Fondamentalement, OS X crée des fichiers d'historique dans un .bash_sessionsdossier pour chaque session (dans mon cas, un pour chaque onglet). Et même en fermant correctement ces sessions, OS X ne rejoue pas l'historique vers .bash_history.

La création .bash_sessions_disablevous désactivez ce comportement.

touch ~/.bash_sessions_disable
Kleber Kihara
la source
La désactivation de l'historique des commandes par session - le comportement par défaut - est l'opposé de ce qui est demandé.
Chris Page
@ChrisPage Ce n'est correct que si la personne qui pose la question pose des questions sur les historiques par session, ce qui ne semble pas être le cas ("se souvenir de l'historique entre les sessions"). Désactiver le comportement de la session bash PERMET de relire un seul historique dans .bash_historyplutôt que de conserver l'historique sous le .bash_sessions/dossier. C'est la bonne réponse à mon humble avis.
Matt H
@MattH La question demande comment faire fonctionner à nouveau l'historique, car il semble ne pas fonctionner du tout, et la désactivation de cette fonctionnalité d'historique par session ne va pas dans la bonne direction. S'il y a un bogue dans le mécanisme d'historique par session, quelqu'un devrait déposer un rapport de bogue, mais présenter une réponse comme si le désactiver est généralement correct pour tous les utilisateurs est… incorrect. Cela fonctionne normalement très bien. Voir mes commentaires sur les différentes réponses pour plus d'informations.
Chris Page
J'aurais également dû le mentionner lors de mon premier commentaire: la désactivation de l'ensemble du mécanisme de sauvegarde / restauration de bash est conçue en dernier recours et doit être évitée si possible. Vous pouvez simplement désactiver le comportement de l'historique des commandes par session en définissant SHELL_SESSION_HISTORYsur 0, comme indiqué dans /etc/bashrc_Apple_Terminal.
Chris Page
1

Cette réponse de ce fil Reddit m'a sauvé:

C'est probablement RVM qui empêche le "hook" de sortie pour que bash_sessions s'exécute. Si vous commentez la ligne suivante dans votre .bash_profile, cela devrait fonctionner.

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

J'ai également eu un problème similaire, aucun historique enregistré. Les solutions données n'ont pas fonctionné, mais j'ai finalement découvert que le problème était aussi simple qu'un .bash_history manquant

La solution était d’aller /home/[username]/et d’ajouter un fichier .bash_history, donc

nano .bash_history

puis tapez quoi que ce soit dans le fichier (sinon il ne sera pas créé), quittez et enregistrez. Après cela, l'histoire a commencé à fonctionner normalement.

Fabien
la source
Si cela résout le problème, quelque chose d'autre ne va pas et devrait être corrigé pour éviter d'autres problèmes. Si vous démarrez Bash alors qu'il n'y a pas de fichier historique, il en créera un. S'il n'essaye pas d'en créer un, ou s'il est incapable de le créer, il y a un problème avec un script de démarrage du shell ou les autorisations du répertoire personnel. Par exemple, consultez la réponse: apple.stackexchange.com/a/118764/6883
Chris Page