Чому мені потрібно запустити “/ bin / bash --login”


12

Я щойно налаштував новий сервер Ubuntu 13.10 з встановленим рубіном 2.1.1 rvm.

Проблема полягає в тому, що кожного разу, коли я переходжу на користувальницьку "рейку" (користувач, з яким я встановив рубін і рейли), мені потрібно запуститись /bin/bash --loginдо того, як Ubuntu визнає, що рубін, рейки або rvmвстановлений.

Сподіваюся, хтось знає:

  1. Що робить команда вище?
  2. навіщо мені це запускати?
  3. і що я можу зробити, щоб вирішити це раз і назавжди? :)

Будь-яка допомога вдячна!


2
Як ви переходите на користувацькі "рейки" (звичайні su? Чи щось подібне su -lчи su --?). Що таке оболонка для входу для "рейок" користувача? Ви змінили змінну PATH користувача, і якщо так, то в якому файлі ( ~/.profileабо ~/.bashrcабо ~/.bash_profileабо ...?)
steeldriver

Тепер я бачу, що проблема виникає лише тоді, коли я використовую команду su для переходу з кореня на користувача рейки. Коли я впадаю з користувачем рейки, цієї проблеми не виникає. Однак я все-таки хотів би знати, що робить / bin / bash --login. :)
Ole Henrik Skogstrøm

Відповіді:


11

Це здається, що середовище, необхідне для пошуку системи встановлених рубінових компонентів, вказане у файлі, який читається лише для оболонок входу. Сторінка керівництва 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. 

Отже , якщо змінні рубінове середовище в /home/rails/.profileабо /etc/profile, наприклад, вони будуть додані до середовища оболонки

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

Якщо ви хочете, щоб середовище рубіну було встановлено незалежно від того, як ви переходите на користувача rails, ви можете перемістити відповідні визначення змінних на користувача ~/.bashrc.


Хм, добре, я думаю, мені потрібен приклад останньої частини. Я новачок у Linux та ubuntu. Які відповідні визначення змінних? У який файл вони зараз записані? ви могли б надати мені приклад? Це трохи теоретично.
Ole Henrik Skogstrøm

5

Я знаю, що це питання було задано 2 роки тому, але у випадку, якщо хтось (як я) все-таки стикається з цим: @steeldriver має рацію - у вашому bashrcодному з цих трьох файлів щось не вистачає . У моєму випадку мені просто потрібно було додати цей рядок у моє ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.