Tại sao tôi cần chạy ứng dụng / bin / bash --login


11

Tôi vừa thiết lập một máy chủ Ubuntu 13.10 mới với ruby ​​2.1.1 được cài đặt thông qua rvm.

Vấn đề là bất cứ khi nào tôi chuyển sang "đường ray" của người dùng (người dùng tôi đã cài đặt ruby ​​và đường ray), tôi phải chạy /bin/bash --logintrước khi Ubuntu nhận ra rằng ruby, đường ray hoặc rvmđược cài đặt.

Hy vọng ai đó biết:

  1. Lệnh trên làm gì?
  2. Tại sao tôi cần phải chạy nó?
  3. và tôi có thể làm gì để giải quyết nó một lần và mãi mãi? :)

Bất kỳ trợ giúp được đánh giá cao!


2
Làm thế nào bạn chuyển sang "đường ray" người dùng (đơn giản su? Hoặc một cái gì đó như su -lhoặc su --?). Shell đăng nhập cho "đường ray" của người dùng là gì? Bạn đã sửa đổi biến PATH của người dùng và nếu như vậy, trong đó tập tin ( ~/.profilehay ~/.bashrchay ~/.bash_profilehay ...?)
steeldriver

Bây giờ tôi thấy vấn đề chỉ xảy ra khi tôi sử dụng lệnh su để chuyển từ root sang người dùng rails. Khi tôi ssh với người dùng đường ray, vấn đề này không xảy ra. Tuy nhiên tôi vẫn muốn biết / bin / bash --login làm gì. :)
Ole Henrik Skogstrøm

Câu trả lời:


11

Có vẻ như môi trường cần thiết cho hệ thống để tìm các thành phần ruby ​​đã cài đặt được chỉ định trong một tệp chỉ được đọc cho các vỏ đăng nhập. Trang hướng dẫn bash có điều này để nói về sự khác biệt giữa shell đăng nhập và shell không đăng nhập:

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.  

trong khi

   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. 

Do đó, nếu các biến môi trường ruby ​​nằm trong /home/rails/.profilehoặc /etc/profileví dụ, chúng sẽ được thêm vào môi trường shell

  • bằng cách gọi rõ ràng một vỏ đăng nhập bằng cách sử dụng su -l railshoặc tốc su --login railssu - rails
  • khi người dùng railsđăng nhập qua SSH
  • bằng cách bắt đầu một subshell như bash --loginsau khi đăng nhập

Nếu bạn muốn môi trường ruby ​​được đặt bất kể bạn chuyển sang người dùng như thế nào rails, bạn có thể chuyển các định nghĩa biến có liên quan sang người dùng ~/.bashrcthay thế.


Hmmm, ok, tôi nghĩ rằng tôi cần một ví dụ về phần cuối cùng. Tôi mới dùng linux và ubfox. Các định nghĩa biến có liên quan là gì? Trong tập tin nào họ viết bây giờ? Ông có thể cho tôi một ví dụ? Đây là một chút về lý thuyết.
Ole Henrik Skogstrøm

4

Tôi biết rằng câu hỏi này đã được hỏi 2 năm trước, nhưng trong trường hợp nếu ai đó (như tôi) vẫn đối mặt với nó: @steel ấn là đúng - bạn đang thiếu một cái gì đó trong bashrcđó bạn có trong một trong 3 tệp đó. Trong trường hợp của tôi, tôi chỉ cần thêm dòng này vào của tôi ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.