ทำไมฉันต้องเรียกใช้“ / bin / bash --login”


12

ฉันมีเพียงแค่ติดตั้ง Ubuntu 13.10 เซิร์ฟเวอร์ใหม่กับทับทิม 2.1.1 rvmที่ติดตั้งผ่าน

ปัญหาคือว่าเมื่อใดก็ตามที่ฉันสลับไปยังผู้ใช้ "ทางรถไฟ" (ผู้ใช้ที่ฉันติดตั้งทับทิมและทางรถไฟด้วย) ฉันต้องทำงาน/bin/bash --loginก่อนที่ Ubuntu จะรับรู้ว่าทับทิมรางหรือrvmติดตั้ง

หวังว่าใครบางคนรู้:

  1. คำสั่งข้างต้นทำอะไร
  2. ทำไมฉันต้องเปิดใช้งาน
  3. และฉันจะทำอย่างไรเพื่อแก้ปัญหาครั้งเดียวและทั้งหมด? :)

ความช่วยเหลือใด ๆ ที่เป็นที่นิยม!


2
คุณเปลี่ยนไปใช้ "rails" ของผู้ใช้suอย่างไร(ธรรมดาหรืออะไรที่คล้ายsu -lหรือsu --?) เชลล์ล็อกอินสำหรับผู้ใช้ "rails" คืออะไร? คุณได้ปรับเปลี่ยนตัวแปร PATH ของผู้ใช้และถ้าเป็นเช่นนั้นไฟล์ใด ( ~/.profileหรือ~/.bashrcหรือ~/.bash_profileหรือ ... ?)
steeldriver

ฉันเห็นแล้วว่าปัญหานี้เกิดขึ้นเมื่อฉันใช้คำสั่ง su เพื่อเปลี่ยนจากรูทเป็นผู้ใช้ราง เมื่อฉันใช้กับผู้ใช้รางปัญหานี้จะไม่เกิดขึ้น อย่างไรก็ตามฉันยังต้องการทราบว่า / bin / bash --login ทำอะไร :)
Ole Henrik Skogstrøm

คำตอบ:


11

ดูเหมือนสภาพแวดล้อมที่จำเป็นสำหรับระบบในการค้นหาส่วนประกอบ 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
  • โดยเริ่ม subshell bash --loginหลังจากเข้าสู่ระบบ

หากคุณต้องการให้สภาพแวดล้อม ruby ​​ถูกตั้งค่าโดยไม่คำนึงถึงวิธีที่คุณเปลี่ยนไปใช้ผู้ใช้railsคุณสามารถย้ายนิยามตัวแปรที่เกี่ยวข้องไปยังผู้ใช้~/.bashrcแทน


อืมฉันคิดว่าฉันต้องการตัวอย่างของส่วนสุดท้าย ฉันยังใหม่กับ Linux และ Ubuntu คำจำกัดความตัวแปรที่เกี่ยวข้องคืออะไร พวกเขาเขียนไฟล์อะไรในตอนนี้ คุณยกตัวอย่างให้ฉันได้ไหม นี่เป็นทฤษฎีเล็กน้อย
Ole Henrik Skogstrøm

5

ฉันรู้ว่าคำถามนี้ถูกถามเมื่อ 2 ปีที่แล้ว แต่ในกรณีที่บางคน (เช่นฉัน) ยังคงเผชิญกับมัน: @steeldriver ถูกต้อง - คุณหายไปจากสิ่งbashrcที่คุณมีในหนึ่งในสามไฟล์เหล่านี้ ในกรณีของฉันฉันแค่ต้องการเพิ่มบรรทัดนี้ลงในของฉัน~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.