web-dev-qa-db-ja.com

'Sudosh'ソースprofile.dスクリプトを使用しないのはなぜですか

/ bin/shがbashへのシンボリックリンクであるCentOS7のインストールがあります。ただし、Sudoを使用すると動作が異なります。たとえば、「Sudo sh」の場合:

[[email protected] ~]$ Sudo sh
sh-4.2# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin

'Sudo bash'の場合:

[[email protected] ~]$ Sudo bash
[[email protected] centos]# echo $PATH
/opt/puppetlabs/puppet/bin:/sbin:/bin:/usr/sbin:/usr/bin

追加のPATH要素は/etc/profile.d/-scriptから取得されます。なぜ「Sudosh」と表示されないのですか?

1
thoredge

~/.bashrcソース/etc/bashrc、次に/etc/profile.d/*をソースします(ただし、/etc/profile?ではありません)。この紛らわしい動作がRedhat派生システムに固有のものであるかどうかはわかりません。

~/.bashrcは、非ログインシェルとして実行されるときにbashによって供給されます。 (ログインシェルとして実行する場合、 bash docs は、~./bashrc~/.bash_profileで手動で取得されていることを確認する必要があることを示しています)。

ただし、shを実行すると、~/.bashrcはソースされません。 shは、ログインシェルとして実行されない限り、何もソースしません。

この混乱を回避するための1つの可能な方法は、ログインシェルを実行するSudo -iを使用する場合です。使用されるシェルは、ターゲットユーザーのシェルに基づいて選択されます(つまり、デフォルトではroot)。

2
sourcejedi