Neden “/ bin / bash --login” komutunu çalıştırmam gerekiyor?


14

Sadece ruby ​​2.1.1 yüklü yeni bir Ubuntu 13.10 sunucusu kurduk rvm.

Sorun kullanıcı "raylar" (ruby ve raylar yüklediğim kullanıcı) her geçiş yaptığınızda /bin/bash --loginUbuntu o ruby, raylar veya rvmyüklü tanımadan önce çalıştırmak zorunda olmasıdır.

Umarım birisi bilir:

  1. Yukarıdaki komut ne işe yarar?
  2. neden çalıştırmam gerekiyor?
  3. ve bir kez ve herkes için çözmek için ne yapabilirim? :)

Herhangi bir yardım takdir!


2
Kullanıcı "raylarına" nasıl geçersiniz (düz su? Veya su -lveya su --? Gibi ). Kullanıcı "rayları" için giriş kabuğu nedir? (Kullanıcının YOL değişkeni değiştirebilir ve eğer öyleyse hangi dosyada mı ~/.profileyoksa ~/.bashrcya ~/.bash_profile? Ya ...)
steeldriver

Şimdi sorun sadece kök komutları ray kullanıcısına geçmek için su komutunu kullandığınızda görüyorum. Raylar kullanıcı ile ssh zaman bu sorun olmaz. Ancak hala / bin / bash --login ne yaptığını bilmek istiyorum. :)
Ole Henrik Skogstrøm

Yanıtlar:


12

Sistemin yüklü yakut bileşenlerini bulması için gerekli ortam, yalnızca giriş kabukları için okunan bir dosyada belirtilir. Bash manuel sayfası, giriş kabukları ile giriş yapmayan kabuklar arasındaki fark hakkında şunları söyler:

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

ve

   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.  

buna karşılık

   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. 

Dolayısıyla, eğer yakut ortam değişkenleri /home/rails/.profileveya /etc/profilemesela, kabuk ortamına ekleneceklerdir

  • açıkça kullanılarak bir giriş kabuğu çağırarak su -l railsveya su --login railsveya stenosu - rails
  • kullanıcı railsSSH üzerinden oturum açtığında
  • bash --logingiriş sonrası gibi bir alt kabuk başlatarak

Ruby ortamının kullanıcıya nasıl geçiş yaptığınıza bakılmaksızın ayarlanmasını railsistiyorsanız, ilgili değişken tanımlarını kullanıcının ~/.bashrcyerine taşıyabilirsiniz .


Hmmm, tamam, sanırım son bölüme bir örnek lazım. Linux ve Ubuntu'da yeniyim. İlgili değişken tanımları nelerdir? Şimdi hangi dosyaya yazılıyorlar? bana bir örnek verebilir misin Bu biraz teorik.
Ole Henrik Skogstrøm

6

Bu sorunun 2 yıl önce sorulduğunu biliyorum, ancak birisinin (benim gibi) hala karşı karşıya kalması durumunda: @steeldriver haklı - bashrcbu 3 dosyadan birinde sahip olduğunuz bir şey eksik . Benim durumumda bu satırı benimkine eklemem gerekiyordu ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.