Une fonctionnalité apparemment nouvelle dans OS X El Capitan (10.11 Beta) est Bash sessions (sessions Terminal) . J'ai maintenant un répertoire ~/.bash_sessions
avec des fichiers d'historique et mes envars HISTFILE
et HISTIGNORE
sont remplacés. Comment puis-je désactiver toutes ces fonctionnalités?
Ce comportement est défini dans /etc/bashrc_Apple_Terminal
. Il contient des commentaires sur la documentation décrivant ce qu’il fait et comment le personnaliser.
Vous pouvez désactiver la fonctionnalité d'historique des commandes par session-terminal en définissant Shell_SESSION_HISTORY=0
dans votre script ~/.bashrc
, comme décrit ci-après:
Vous pouvez désactiver ce comportement et partager un seul historique en définissant Shell_SESSION_HISTORY à 0. Il existe quelques personnalisations utilisateur courantes qui organise le partage de nouvelles commandes entre les shells en cours d'exécution par manipuler l'historique à chaque invite, et ils incluent généralement 'shopt -s histappend'; Par conséquent, si l’option histappend Shell est activé, l'historique par session est désactivé par défaut. Tu peux l'activer explicitement en définissant Shell_SESSION_HISTORY sur 1.
Notez que, bien que vous puissiez désactiver l'intégralité du mécanisme de restauration de l'état de la session en créant ~/.bash_sessions_disable
, il est inutile de désactiver simplement la fonctionnalité d'historique des commandes par session, ce qui n'est pas recommandé.
Si vous démarrez manuellement une nouvelle session Bash (à savoir bash -xl
), vous pouvez voir ce qui est exécuté lors de la connexion.
Vous verrez la ligne suivante dans la sortie:
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
Vous pouvez créer un fichier .bash_sessions_disable
dans votre répertoire de base pour désactiver cette fonctionnalité.
Pour résumer, cela a à voir avec la fonctionnalité Resume de Apple. Lorsque cette fonctionnalité est activée, lorsque vous quittez une application ou redémarrez, la prochaine fois que l'application sera ouverte, elle ouvrira les fenêtres précédemment ouvertes.
En ce qui concerne Terminal, trois choses doivent être en place pour que cela se produise:
$HOME/.bash_sessions_disable
doit pas être présentSystem Preferences/General/Close Windows when quitting an app
doit pas être coché. Reopen windows
.Lorsque vous rouvrez le terminal, il rouvrira les mêmes fenêtres et onglets que vous aviez auparavant dans les mêmes positions d'écran. De plus, si vous avez coché Terminal/Preferences/your-window-type/Windows/Resume/Restore-text-when-reopening-windows
, le texte sera restauré sur chaque écran.
Enfin, et cela concerne spécifiquement la question du PO, celui-ci restaurera l'historique dans chaque fenêtre/onglet si les conditions suivantes sont remplies:
Shell_SESSION_HISTORY
est non défini ou défini sur 1shopt histappend
n'est pas définiHISTTIMEFORMAT
n'est pas définiSi Shell_SESSION_HISTORY
est explicitement défini sur 1 dans .bashrc
, les deux dernières conditions requises sont remplacées, c'est-à-dire que shopt histappend
ou HISTTIMEFORMAT
peut être défini.
De plus, il convient de prêter attention aux variables HISTSIZE
et HISTFILESIZE
. Ils ne doivent pas être trop gros ou trop petits, et certains conseillent de les laisser non configurés pour qu'ils prennent les valeurs par défaut d’Apple.
Tout ce qui a été écrit jusqu'à présent sur ce sujet est exact et utile, et les techniques déjà mentionnées devraient être utilisées à la place. Je vais parler d'une approche totalement nucléaire, uniquement pour divertir les alternatives, mais aussi pour approfondir la compréhension de ce sujet.
La seule raison pour laquelle j'ai acquis cette connaissance est tout simplement parce que je cherchais une solution alternative à la nécessité de créer un fichier ~/.bash_sessions_disable
; J'aurais plutôt préféré éviter que le comportement des sessions ne se produise en ajoutant simplement quelques lignes à mon ~/.bash_profile
existant. Malheureusement, cela n’est pas possible sans le nucléaire, la réponse officielle reste donc la meilleure approche.
Résumé
Lorsque Bash démarre pour la première fois sur MacOS, il commence par générer /etc/profile
, qui à son tour génère /etc/bashrc
. Le contenu de ce fichier comprend cette ligne:
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
La variable d'environnement $TERM_PROGRAM
est uniquement définie par l'application Terminal d'Apple. Imprimer la valeur de cette variable retourne Apple_Terminal
. En d'autres termes, le fichier /etc/bashrc
tente de créer un fichier /etc/bashrc_Apple_Terminal
s'il existe et qu'il est lisible. C'est dans ce fichier que MacOS effectue sa gestion de session Bash spéciale pour se lier aux fonctionnalités de reprise du système d'exploitation.
Après tout cela, Bash recherchera toutes les configurations d’un utilisateur dans son répertoire personnel (comme ~/.bash_profile
ou ~/.bashrc
). Ceci étant dit, il n’ya aucun moyen de remplacer tout le travail effectué dans le fichier /etc/bashrc_Apple_Terminal
au niveau purement de la configuration (par opposition à la configuration et la création d’un nouveau fichier) sans effectuer ce que les autres ont mentionné, à savoir définir $Shell_SESSION_HISTORY
sur 0
pour éliminer l'historique de session et créer un ~/.bash_sessions_disable
pour empêcher la création du répertoire .bash_sessions
à chaque démarrage du terminal Apple.
Approche nucléaire
Les deux alternatives possibles pour éliminer toute nouvelle fonctionnalité MacOS seraient 1) de supprimer la dernière ligne du fichier /etc/bashrc
ou 2) de renommer ou de supprimer le /etc/bashrc_Apple_Terminal
en un autre.
Après cela, l'application Terminal d'Apple ne se comportera plus différemment des émulateurs de terminal non Apple.