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)に必要な特定の方法で起動されるため、意味の混同が生じます。