Почему мне нужно запустить "/bin/bash --login"

Я только что установил новый сервер Ubuntu 13.10 с ruby ​​2.1.1, установленным через rvm,

Проблема в том, что всякий раз, когда я переключаюсь на пользователя "rails" (пользователь, с которым я установил ruby ​​и rails), я должен запускаться /bin/bash --login прежде чем Ubuntu признает, что рубин, рельсы или rvm установлено.

Надеюсь, кто-то знает:

  1. Что делает команда выше?
  2. зачем мне его запускать?
  3. и что я могу сделать, чтобы решить это раз и навсегда?:)

Любая помощь приветствуется!

2 ответа

Похоже, среда, необходимая для системы, чтобы найти установленные компоненты ruby, указана в файле, который читается только для оболочек входа в систему. На странице руководства bash можно сказать о разнице между оболочками для входа и не для входа:

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

а также

   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.  

в то время как

   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. 

Следовательно, если переменные среды ruby ​​находятся в /home/rails/.profile или же /etc/profile например, они будут добавлены в среду оболочки

  • явно вызывая оболочку входа в систему, используя su -l rails или же su --login rails или стенография su - rails
  • когда пользователь rails входит через SSH
  • запустив подоболочку как bash --login после входа

Если вы хотите, чтобы среда ruby ​​была установлена ​​независимо от того, как вы переключаетесь на пользователя railsВы можете переместить соответствующие определения переменных в пользователя ~/.bashrc вместо.

Я знаю, что этот вопрос задавался 2 года назад, но в случае, если кто-то (как я) все еще сталкивается с этим: @steeldriver прав - вы что-то упускаете в своем bashrc который у вас есть в одном из этих 3 файлов. В моем случае мне просто нужно было добавить эту строку в мой ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Другие вопросы по тегам