Dlaczego muszę uruchomić „/ bin / bash --login”


12

Właśnie skonfigurowałem nowy serwer Ubuntu 13.10 z zainstalowanym Ruby 2.1.1 rvm.

Problem polega na tym, że za każdym razem, gdy przełączam się na użytkownika „szyny” (użytkownika, z którym instalowałem Ruby i szyny), muszę uruchomić, /bin/bash --loginzanim Ubuntu rozpozna ten Rubin, szyny lub rvmzostanie zainstalowany.

Mam nadzieję, że ktoś wie:

  1. Co robi powyższe polecenie?
  2. dlaczego muszę go uruchomić?
  3. i co mogę zrobić, aby rozwiązać to raz na zawsze? :)

Każda pomoc jest mile widziana!


2
Jak przechodzisz na „szyny” użytkownika (zwykłe su? Lub coś w rodzaju su -llub su --?). Co to jest powłoka logowania dla „szyn” użytkownika? Czy zmodyfikować zmienną PATH użytkownika, a jeśli tak, w jaki plik ( ~/.profilealbo ~/.bashrcalbo ~/.bash_profilealbo ...?)
steeldriver

Widzę teraz, że problem występuje tylko wtedy, gdy używam polecenia su, aby przełączyć się z użytkownika root na użytkownika rails. Gdy zaloguję się do użytkownika szyny, ten problem się nie zdarza. Jednak nadal chciałbym wiedzieć, co robi / bin / bash --login. :)
Ole Henrik Skogstrøm

Odpowiedzi:


11

Wygląda na to, że środowisko niezbędne do znalezienia przez system zainstalowanych składników ruby ​​jest określone w pliku, który jest odczytywany tylko dla powłok logowania. Strona podręcznika bash zawiera informację o różnicy między powłokami logowania i powłokami, które nie są zalogowane:

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

i

   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.  

natomiast

   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. 

Dlatego jeśli ruby ​​zmiennych środowiskowych znajdują się w /home/rails/.profilelub /etc/profilena przykład, zostaną dodane do środowiska powłoki

  • przez jawne wywoływanie powłoki logowania za pomocą su -l railslub su --login railslub stenografiisu - rails
  • gdy użytkownik railsloguje się przez SSH
  • uruchamiając podpowłokę bash --loginpo zalogowaniu

Jeśli chcesz ustawić środowisko Ruby niezależnie od tego, w jaki sposób przełączasz się na użytkownika rails, możesz ~/.bashrczamiast tego przenieść odpowiednie definicje zmiennych do użytkownika .


Hmmm, ok, chyba potrzebuję przykładu z ostatniej części. Jestem nowy w Linuksie i Ubuntu. Jakie są odpowiednie definicje zmiennych? W jakim pliku są teraz zapisane? czy możesz podać mi przykład? To jest trochę teoretyczne.
Ole Henrik Skogstrøm

5

Wiem, że to pytanie zostało zadane 2 lata temu, ale na wypadek, gdyby ktoś (taki jak ja) wciąż miał do czynienia: @steeldriver ma rację - brakuje Ci czegoś, bashrcco masz w jednym z tych 3 plików. W moim przypadku wystarczy dodać tę linię do mojej ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.