web-dev-qa-db-ja.com

rootが.bash_profileをソースしないのはなぜですか?

susu -ではなく)を使用してrootとしてログインしようとするたびに、user1のホームディレクトリに.bash_profileが読み込まれません。

基本的に、私の/var/rootディレクトリには.bash_profileがないので、.bash_profile/var/rootのコピーを入れて、su -をテストします。

また、.bash_profilevar/root内)も自動的には供給されません。

とにかく、私はsuを使用するときにrootアカウントで自動的にソースされるuser1の.bash_profileを作成したいと思います。

私は何をすべきか?

(以前は機能していました!ある日、ソースがありません!bashの設定が変更された可能性がありますか?ログイン後にsource .bash_profileを入力すると機能します。)

MacとOS X Yosemiteを使用しています。

10
sirion

OS Xでのrootのデフォルトのシェルは/bin/shです。そのshbashのバージョンですが、 sh Bashという名前で呼び出された場合

は、POSIX標準にも準拠しながら、shの過去のバージョンの起動時の動作をできるだけ模倣しようとします。

インタラクティブログインシェルとして、または--loginオプションを使用して非インタラクティブシェルとして呼び出されると、最初に/etc/profile~/.profileからコマンドを読み取って実行しようとします。 ... shとして呼び出されたシェルは、他の起動ファイルからコマンドを読み取って実行しようとしません

つまり、ログインシェルとして呼び出されたかどうかに関係なく.bash_profileはまったく読み取られません。代わりに.profileを使用することも、シンボリックリンクを使用することもできます。 su -lを使用してログインシェルを起動すると、.profileが起動時に読み込まれますが、.bash_profileは読み込まれません。


dscl を使用してルートのシェルを変更することもできます(/etc/passwdnotを使用してOS X上のシェルを決定することに注意してください)。ルートの現在のシェルをdscl . -read /Users/root UserShellで確認できます。ドキュメントを参照し、それを別のものに変更する前に慎重に検討してください。

別のアプローチは、suの呼び出しを変更して、bashをすぐに強制的に実行することです。

あなたが言ったことを考えると、おそらくシンボリックリンクをお勧めしますが、Bashの POSIXモード によって行われる変更を調べて、それらを使用するかどうかを決定することもできます。

11
Michael Homer

「ログインシェル」(login、またはsshdから直接呼び出される)ではなく、単純な「インタラクティブシェル」と見なされるためです。例はこちらをご覧ください: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

したがって、ログインオプションを使用してsuを強制します。つまり、-lオプション:

su -l

または、環境を.bashrcファイル。

5
myaut

ログインシェルを起動していないため、rootユーザーは.bash_profileではなく.bashrcファイルを実行しようとします。

Bashマニュアルからman bash

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-Shell startup file

~ .bashrcファイルはrootユーザーのホームディレクトリにある必要があります。

実際に質問に答えるために、user1の.bashrcファイルを使用する場合は、user1からrootユーザーへのソース.bashrc間に(シンボリック)リンクを作成することをお勧めします。

また、. /homedirectory/of/user1/.bash_profileをrootユーザーの.bashrcファイルに追加します。

5
Lambert