.bashrc non exécuté lors de l'ouverture d'un nouveau terminal


84

Le code dans .bashrc ne s'exécute pas lorsque j'ouvre une nouvelle fenêtre de terminal dans Ubuntu 12.04. J'ai remarqué cela lors de la création d'un fichier .bash_aliases. Les alias ne sont pas apparus lorsque j'ai ouvert un nouveau terminal. Toutefois, lorsque je tape source .bashrcles alias sont apparus.

.bashrc doit être exécuté à chaque fois que j'ouvre une nouvelle fenêtre de terminal, non?

Comment puis-je y arriver?


Essayez .profile à la place.
Jippie

4
@jippie Non, .profileest lu au moment de la connexion, pas lorsque vous ouvrez un nouveau terminal, sauf en cas de mauvaise configuration quelque part. Selah: avez-vous changé quelque chose à partir de la configuration par défaut? Veuillez exécuter ps -o command $$ $PPIDdans un terminal et copier-coller le résultat.
Gilles

1
Juste pour vous assurer que vous mettez .bashrcdans votre dossier personnel, non?
Jjed

Peut-être envie de vérifier echo $SHELL. Cela m'est arrivé et le shell était / bin / sh au lieu de bash. Corrigez-le dans / etc / passwd et son exécution .bashrc.
Joe Flynn

Réponses:


129

Ce n'est pas nécessairement exécuté; Au sommet de la norme. Bashrc est ce commentaire:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Je crois qu'il existe une option pour exécuter le terminal bash en tant que shell de connexion ou non. Avec Ubuntu, gnome-terminal ne s’exécute normalement pas en tant que shell de connexion. Par conséquent, .bashrc doit être exécuté directement.

Pour les shells de connexion (comme les terminaux virtuels), normalement, le fichier ~/.profileest exécuté, sauf si vous avez l'un ~/.bash_profileou l' autre ~/.bash_login, mais ils n'y sont pas par défaut. Par défaut, Ubuntu utilise uniquement .profile.

La norme ~/.profilecontient ceci:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Cela fonctionne .bashrc s’il est disponible - en supposant que $ BASH_VERSION est présent dans votre environnement. Vous pouvez vérifier cela en entrant la commande echo $BASH_VERSIONet elle devrait afficher des informations sur le numéro de version - il ne devrait pas être vide.


4
Après avoir compris ces instructions, je suis allé dans mon application de terminal et je suis allé dans Édition -> Préférences de profil -> Titre et commande -> Exécuter la commande en tant que shell de connexion. J'ai décoché ça. Merci pour l'aide.
Selah

Pouvez-vous préciser quand .profile (d'où .bashrc) est chargé / lu? Cela semble être fait lorsque les utilisateurs se connectent à leur session de bureau. La réponse suggère que cela se produit lorsque vous démarrez une nouvelle session terminal / shell "Pour les shells de connexion (comme les terminaux virtuels), normalement, le fichier ~ / .profile est exécuté ..."
hedgehog,

4
Il est normalement exécuté lorsque vous démarrez un nouveau shell de connexion (pas vraiment une session de bureau, car vous pouvez exécuter un nouveau shell de connexion à partir de la session de bureau). Comme je l'ai dit, il est exécuté par défaut, mais pas si vous avez créé ~/.bash_profileou ~/.bash_login. Vous pouvez tester en cochant ou non la case à cocher Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, puis quitter puis réexécuter le terminal. Vous pouvez faire écho à quelque chose de .profile à tester.
Marty Fried

@Selah Votre commentaire m'a aidé plus que la réponse réelle;) merci beaucoup d'avoir fait le commentaire!
Aleks

Donc, si vous avez créé ~/.bash_profileou ~/.bash_loginsur votre système et que vous voulez les conserver, mais que vous voulez quand même ~/.profileet à partir de là ~/.bashrc, vous pouvez l’alimenter à partir de la vôtre ~/.bash_profileou ~/.bash_loginavec une ligne contenant source "$HOME/.profile". Vous rend la sortie colorée de ls également dans les coquilles de connexion!
tanius

26

Dans mon cas, tout simplement les .bashrclignes de chargeur manquaient dans.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Je l'ai ajouté manuellement et cela a fonctionné avec mon nouveau login


3
.bash_profile? Ubuntu utilise un .profilepar défaut, pas .bash_profile.
Muru

souvent, le serveur Ubuntu ne récupère pas .bashrc ... ci-dessus fonctionne donc ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Charger la valeur par défaut
Scott Stensland

Cela l'a résolu pour moi! J'ai ajouté pcreet il semble que le profil bash a été écrasé au lieu de l'ajouter.
Shapiro Yaacov le

7

.bash_profiledétient la configuration pour le shell bash. Lorsque vous ouvrez un terminal, celui-ci lit et exécute les commandes à partir de ~/.bash_profile. Vous pouvez donc ajouter ce qui suit .bash_profilepour configurer le shell en fonction de bashrc.

. ~/.bashrc

Sauf si votre terminal exécute un shell de connexion (ce qui n'est pas le cas par défaut dans Ubuntu), ~/.bash_profilene sera pas lu (et il n'existe pas par défaut dans Ubuntu)
muru

5

Si $BASH_VERSIONn'est pas défini, essayez d'utiliser la chshcommande pour définir votre shell /bin/bash.

J'ai eu un problème similaire avec 12.04 LTS, et il s'est avéré que le shell par défaut du nouveau compte d'utilisateur était défini sur /bin/sh, ce qui était la cause du problème.


C'était la raison!
Mulya

1

Selon le commentaire dans .profile

~ / .profile: exécuté par l'interpréteur de commande pour les shell de connexion. 11 Ce fichier n'est pas lu par bash (1), si ~ / .bash_profile ou ~ / .bash_login¬ 10 # existe

Alors voilà, si ~/.bash_profileou ~/.bash_login exists, ceux-ci seront exécutés au lieu de~/.profile

si vous voulez exécuter ~/.bashrcsimplement ajouter la ligne source ~/.bashrcàbash_profile


1
J'ai connu exactement le même problème. Mon .bashrca été recherché jusqu'à ce que je crée un .bash_profilefichier. J'ai donc ajouté la source ~/.bashrc ligne à mon .bash_profiledossier.
Lashae

0

Au lieu de parcourir tout cela, allez Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"dans la boîte de commande personnalisée bashet écrivez -la. La prochaine fois que vous ouvrirez le terminal, il se déroulera également automatiquement.


De quelle interface graphique parlez-vous? gnome ou unité
Nic Wanavit
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.