「/ bin / bash --login」を実行する必要があるのはなぜですか


11

ruby 2.1.1がインストールされた新しいUbuntu 13.10サーバーをセットアップしましたrvm

問題は、ユーザー "rails"(私がrubyとrailsをインストールしたユーザー)に切り替えるたびに、/bin/bash --loginUbuntuがruby、rails、またはrvmインストールされていることを認識する前に実行する必要があることです。

誰かが知っていることを願っています:

  1. 上記のコマンドは何をしますか?
  2. なぜそれを実行する必要があるのですか?
  3. そして、私はそれを一度だけ解決するために何ができますか?:)

どんな助けも大歓迎です!


2
どのようにして、ユーザ「レール」に切り替えている(無地su?またはのようなものsu -lsu --?)。ユーザー「rails」のログインシェルとは何ですか?ユーザーのPATH変数を変更しましたか。変更した場合、どのファイル(~/.profileまたは~/.bashrcor ~/.bash_profileまたは...?)で
steeldriver 14

suコマンドを使用してrootユーザーからrailsユーザーに切り替えるときにのみ問題が発生することがわかりました。Railsユーザーとsshで接続すると、この問題は発生しません。ただし、/ bin / bash --loginが何をするのかを知りたいです。:)
オレヘンリックスコグストロム14

回答:


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. 

したがって、ruby環境変数がにある/home/rails/.profile場合/etc/profile、たとえば、シェル環境に追加されます

  • su -l railsまたはsu --login railsまたは省略形を使用してログインシェルを明示的に呼び出すsu - rails
  • ユーザーがrailsSSH経由でログインするとき
  • bash --loginログイン後にサブシェルを起動する

ユーザーへの切り替え方法に関係なくルビー環境を設定したい場合は、代わりにrails関連する変数定義をユーザーのもの~/.bashrcに移動できます。


うーん、わかりました、最後の部分の例が必要だと思います。私はLinuxとUbuntuを初めて使います。関連する変数の定義は何ですか?現在、どのファイルに書き込まれていますか?例を挙げていただけますか?これは少し理論的です。
オレヘンリックスコグストロム14

4

私はこの質問が2年前に尋ねられたことを知っていますが、(私のような)誰かがまだそれに直面している場合:@steeldriverが正しい-あなたはbashrcこれらの3つのファイルの1つにあるものを失っています。私の場合、この行を追加する必要がありました~/.bashrc

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.