web-dev-qa-db-fra.com

Pourquoi dois-je exécuter "/ bin / bash --login"

Je viens de configurer un nouveau serveur Ubuntu 13.10 avec Ruby 2.1.1 installé via rvm.

Le problème est que chaque fois que je passe à l'utilisateur "Rails" (l'utilisateur avec lequel j'ai installé Ruby et Rails avec), je dois exécuter /bin/bash --login avant qu'Ubuntu ne reconnaisse que Ruby, Rails ou rvm est installé.

J'espère que quelqu'un sait:

  1. Que fait la commande ci-dessus?
  2. pourquoi ai-je besoin de l'exécuter?
  3. et que puis-je faire pour le résoudre une fois pour toutes? :)

Toute aide est appréciée!

11

Il semble que l'environnement nécessaire pour que le système trouve les composants Ruby installés est spécifié dans un fichier qui n'est lu que pour les shells de connexion. La page de manuel bash a ceci à dire sur la différence entre les shells de connexion et les shells non-login:

INVOCATION
   A  login Shell is one whose first character of argument zero is a -, or
   one started with the --login option.

et

   When bash is invoked as an interactive login Shell, or as a non-inter‐
   active Shell with the --login option, it first reads and executes  com‐
   mands  from  the file /etc/profile, if that file exists. After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  

tandis que

   When an interactive Shell that is not a login Shell  is  started,  bash
   reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
   these files exist. 

Par conséquent, si les variables d'environnement Ruby se trouvent par exemple dans /home/Rails/.profile ou /etc/profile, elles seront ajoutées à l'environnement Shell.

  • en invoquant explicitement un shell de connexion à l'aide de su -l Rails ou su --login Rails ou du raccourci su - Rails
  • lorsque l'utilisateur Railsse connecte via SSH
  • en démarrant un sous-shell en tant que bash --login après la connexion

Si vous souhaitez que l'environnement Ruby soit défini quelle que soit la manière dont vous passez à l'utilisateur Railsname__, vous pouvez déplacer les définitions de variable pertinentes vers le ~/.bashrc de l'utilisateur.

11
steeldriver

Je sais que cette question a été posée il y a 2 ans, mais au cas où quelqu'un (comme moi) y ferait encore face: @steeldriver a raison, il manque quelque chose dans votre bashrc que vous avez dans l'un de ces 3 fichiers. Dans mon cas, je devais simplement ajouter cette ligne dans le mien ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
4
PepeHands