sudo -i/-s
ここの違いを読んでいました。コマンドを使用した後shopt
、all(sudo su/sudo -i/sudo -s
)は$SHELL
同じ結果を提供しますが、shopt
コマンドの結果は異なります。
それでは、ログインシェルと非ログインシェルはどのように定義されていますか?
どこからshopt
結果を得ますか?
なぜ関係ないの$SHELL
ですか?
須藤す
givinv@87-109:~$ sudo su
root@87-109:/home/givinv#
root@87-109:/home/givinv#
root@87-109:/home/givinv# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
No login shell
root@87-109:/home/givinv# echo $SHELL
/bin/bash
root@87-109:/home/givinv#
root@87-109:/home/givinv# exit
givinv@87-109:~$
sudo -i
givinv@87-109:~$ sudo -i
root@87-109:~#
root@87-109:~# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
Login shell
root@87-109:~# echo $SHELL
/bin/bash
root@87-109:~#
sudo -s
root@87-109:~# sudo -s
root@87-109:~# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
No login shell
root@87-109:~# echo $SHELL
/bin/bash
root@87-109:~#
$SHELL
は、/ etc / passwdエントリで定義されているシェルによってフォークされ(そして、擬似端末に接続されます)ます。このシェルはログインシェルであり、でテストできますif [[ -o login ]]; then echo "I am a login shell"; fi
。ログインシェルであるため、新しいセッションに適したタスクを実行します。たとえば、~/.zprofile
環境変数を設定する可能性のあるソースまたは類似のもの、およびこの時点で実行するカスタムシェルコード
.profile
または同等物)、および2.それはするはずのシェルのAのログインで開始で定義されている、/etc/passwd
または同等のユーザー。$SHELL
後者を含む場合、shopt
出力は前者を処理します。通常、(2)のシェルがログイン時に起動されると、(1)に必要な特定の方法で起動されるため、意味の混同が生じます。