Existe-t-il un fichier Bash qui sera toujours sourcé en mode interactif, qu'il soit connecté ou non?

10

Pour autant que je sache, les shells interactifs peuvent être connectés ou non, et les fichiers de démarrage pour eux sont différents.

  • Si le shell de connexion interactif + → /etc/profilepuis la première lisible ~/.bash_profile, ~/.bash_loginet~/.profile
  • Si shell interactif + sans connexion → /etc/bash.bashrcalors~/.bashrc

Je veux définir certaines variables chaque fois que j'utilise un shell interactif, qu'il s'agisse ou non d'un shell de connexion.

S182
la source
1
@strugee Non, cette question ne concerne pas les variables d'environnement.
Gilles 'SO- arrête d'être méchant'
@ Gilles oui, mais votre réponse s'applique tout aussi bien.
strugee
1
@strugee C'est parce que je suis allé au-delà de la question immédiate et j'ai abordé un sujet périphérique. Un paragraphe dans une réponse ne fait pas de doublon. Les questions ne sont des doublons que si elles ont des réponses sensiblement identiques, pas s'il se trouve qu'une réponse contient suffisamment de matière pour répondre à la seconde.
Gilles 'SO- arrête d'être méchant'

Réponses:

10

Non, il n'y en a pas. Oui, c'est un défaut de conception.

Utilisez le contenu suivant dans ~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

Attention, bash a une bizarrerie encore plus étrange: quand il s'agit d'un shell de connexion non interactif et que le processus parent est rshdor sshd, bash sources ~/.bashrc(mais pas ~/.bash_profileou ~/.profile). Donc, vous voudrez peut-être mettre cela en haut de votre .bashrc:

if [[ $- != *i* ]]; then return; fi

Voir aussi Différence entre .bashrc et .bash_profile et Différence entre le shell de connexion et le shell sans connexion?

Gilles 'SO- arrête d'être méchant'
la source
Ces bizarreries sont pour des raisons de sécurité (ne chargez pas de fichiers inattendus lors de l'exécution dans un paramètre sensible à la sécurité).
vonbrand
2
@vonbrand Er, quoi? Non, ces bizarreries n'ont absolument rien à voir avec la sécurité. Il n'y a pas de «fichiers inattendus» impliqués (sauf que le chargement .bashrcdans un cadre non interactif peut effectivement compter comme inattendu), ni aucune vérification de tout contexte sensible à la sécurité.
Gilles 'SO- arrête d'être méchant'
Est-ce une méthode pour éviter les boucles?
Braiam
1
@Braiam Quelles boucles?
Gilles 'SO- arrête d'être méchant'