Connecté à "-bash", pas à "bash". Et quelle est la différence?

1

Je me suis connecté via sshune machine à distance Ubuntu.

Par défaut, je suis dans un terminal appelé -bash(notez le tiret). Ce bash ne charge pas / n'utilise pas mon ~ / .bashrc.

En entrant bashdans le terminal, j'arrive à un terminal, qui utilise également mon .bashrc.

Maintenant, quelle est la différence entre -bashet bash. Pourquoi suis-je connecté par défaut à la -bashversion? J'ai déjà exécuté chsh -s /bin/bashet redémarré la machine qui, selon ce post, définit l'environnement par défaut. Cela semble échouer. Et enfin, si je ne peux pas passer à la bash "normale", comment puis-je obtenir -bash pour utiliser mon fichier .bashrc?

Pour illustrer mon problème, voici le flux de travail affichant la sortie de la console:

user@machine:~$ echo $0
-bash
user@machine:~$ bash
~: echo $0
bash
muuh
la source

Réponses:

3

Pour les shells, préfixer argv [0] par un tiret est une façon traditionnelle de lui demander d'être un "shell de connexion" (équivalent à eg bash --login). Les shells de connexion diffèrent des "classiques" en ce sens qu'ils utilisent un script de démarrage différent (par exemple, ~/.profileau lieu de ~/.bashrc) - il pourrait afficher un message d'accueil, vérifier le courrier, démarrer ssh-agent, etc., autrement dit, des tâches qui ne doivent fait une fois.

Habituellement, le shell de connexion doit être chargé manuellement pour charger à l' .bashrcaide de:

. ~/.bashrc

ou:

source ~/.bashrc

à la fin du ~/.bash_profilescript.

Grawity
la source