Почему мне нужно запустить "/bin/bash --login"
Я только что установил новый сервер Ubuntu 13.10 с ruby 2.1.1, установленным через rvm,
Проблема в том, что всякий раз, когда я переключаюсь на пользователя "rails" (пользователь, с которым я установил ruby и rails), я должен запускаться /bin/bash --login прежде чем Ubuntu признает, что рубин, рельсы или rvm установлено.
Надеюсь, кто-то знает:
- Что делает команда выше?
- зачем мне его запускать?
- и что я могу сделать, чтобы решить это раз и навсегда?:)
Любая помощь приветствуется!
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"