나는 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. 로그인시 시작되는 쉘 정의 된/etc/passwd
또는 이와 동등한 사용자 .$SHELL
후자를 포함하고,shopt
출력은 전자를 처리합니다. 일반적으로 (2)의 셸이 로그인시 시작되면 (1)에 필요한 특정 방식으로 시작되므로 의미의 혼동이 발생합니다.