su
(su -
ではなく)を使用してrootとしてログインしようとするたびに、user1のホームディレクトリに.bash_profile
が読み込まれません。
基本的に、私の/var/root
ディレクトリには.bash_profile
がないので、.bash_profile
に/var/root
のコピーを入れて、su -
をテストします。
また、.bash_profile
(var/root
内)も自動的には供給されません。
とにかく、私はsu
を使用するときにrootアカウントで自動的にソースされるuser1の.bash_profile
を作成したいと思います。
私は何をすべきか?
(以前は機能していました!ある日、ソースがありません!bashの設定が変更された可能性がありますか?ログイン後にsource .bash_profile
を入力すると機能します。)
MacとOS X Yosemiteを使用しています。
OS Xでのroot
のデフォルトのシェルは/bin/sh
です。そのsh
もbash
のバージョンですが、 sh
Bashという名前で呼び出された場合 :
は、POSIX標準にも準拠しながら、
sh
の過去のバージョンの起動時の動作をできるだけ模倣しようとします。インタラクティブログインシェルとして、または
--login
オプションを使用して非インタラクティブシェルとして呼び出されると、最初に/etc/profile
と~/.profile
からコマンドを読み取って実行しようとします。 ... shとして呼び出されたシェルは、他の起動ファイルからコマンドを読み取って実行しようとしません
つまり、ログインシェルとして呼び出されたかどうかに関係なく、.bash_profile
はまったく読み取られません。代わりに.profile
を使用することも、シンボリックリンクを使用することもできます。 su -l
を使用してログインシェルを起動すると、.profile
が起動時に読み込まれますが、.bash_profile
は読み込まれません。
(dscl
を使用してルートのシェルを変更することもできます(/etc/passwd
はnotを使用してOS X上のシェルを決定することに注意してください)。ルートの現在のシェルをdscl . -read /Users/root UserShell
で確認できます。ドキュメントを参照し、それを別のものに変更する前に慎重に検討してください。
別のアプローチは、su
の呼び出しを変更して、bash
をすぐに強制的に実行することです。
あなたが言ったことを考えると、おそらくシンボリックリンクをお勧めしますが、Bashの POSIXモード によって行われる変更を調べて、それらを使用するかどうかを決定することもできます。
「ログインシェル」(login
、またはsshd
から直接呼び出される)ではなく、単純な「インタラクティブシェル」と見なされるためです。例はこちらをご覧ください: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
したがって、ログインオプションを使用してsu
を強制します。つまり、-l
オプション:
su -l
または、環境を.bashrc
ファイル。
ログインシェルを起動していないため、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ファイルに追加します。