대화형, 비대화형, 로그인 및 비로그인 쉘에 대해 계속해서 읽고 있습니다.
(이것은 .bash* 파일을 읽는 맥락에 있습니다).
각 유형의 쉘이 무엇인지 이해하지 못하므로 기본부터 시작하겠습니다.
Mac에서 Ubuntu 시스템으로 SSH를 통해 연결하면 어떤 유형의 셸이 실행되나요?
답변1
Ubuntu 상자에 SSH로 연결하면 대화형 로그인 셸이 나타납니다. 차이점은 다음과 같습니다.
대화형과 비대화형:프롬프트에 입력할 수 있는 모든 쉘은 대화형입니다. 실제로 많은 스크립트는
$PS1
대화형인지 확인하기 위해 프롬프트 문자열을 포함하는 변수를 테스트합니다. 쉘이 쉘 스크립트를 실행하는 경우 비대화형입니다.따라서 그렇게 하면
ssh yourbox.example.com
기본 설정을 가정하여 대화형 셸을 얻게 되고, 그렇게 하면ssh yourbox.example.com mighty_shellscript.sh
비대화형 셸로 끝나고 스크립트가 종료되면 SSH 세션이 종료됩니다.로그인 및 비로그인:콘솔에서 로그인하거나 원격으로(예: SSH) 로그인하거나
-l
옵션을 에 전달하면bash
로그인 셸이 생성됩니다. 그렇지 않으면(예: 터미널 창을 열 때) 비로그인 셸이 표시됩니다.쉘이 로그인 쉘인지 테스트하려면 해당 명령 이름이
-bash
다음 인지 확인하십시오bash
.ps -ef | grep [b]ash
답변2
대화형 로그인 셸이 제공됩니다. 하지만 당연하게 여기지 말고 직접 확인해 보세요.
이는 (에서) 로그인 쉘이 있음을 알려줍니다 man bash
.
# shopt | grep login
login_shell on
이는 대화형 쉘이 있음을 알려줍니다 . i
(from man bash
)을 찾으십시오.
# echo $-
himBH
귀하가 얻는 대화형 로그인 셸은 다음에 설명된 대로 , 및 /etc/profile
중 하나를 읽었습니다 .~/.bash_profile
~/.bash_login
~/.profile
man bash
bash가 호출될 때 대화형 로그인 셸, 또는 --login 옵션을 사용하는 비대화형 쉘로,해당 파일이 존재하는 경우 먼저 /etc/profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~/.bash_profile, ~/.bash_login 및 ~/.profile을 순서대로 찾아서 존재하고 읽을 수 있는 첫 번째 명령을 읽고 실행합니다. 이 동작을 방지하기 위해 쉘이 시작될 때 --noprofile 옵션을 사용할 수 있습니다.
답변3
그만큼SSH(1)매뉴얼 페이지는 다음과 같이 말합니다.
만약에명령지정되면 로그인 쉘 대신 원격 호스트에서 실행됩니다.
그리고
사용자의 신원이 서버에 의해 승인되면 서버는 주어진 명령을 실행하거나 시스템에 로그인하여 사용자에게 원격 시스템의 일반 쉘을 제공합니다.
그것은 당신이 얻는 쉘이 로그인 쉘이라는 것을 나에게 제안합니다.
답변4
이 명령을 시도해 보세요.
[max@localhost ~]$ echo $SHELL /bin/bash
쉘 유형이 이 변수에 저장되어 있기 때문에 이 출력이 표시됩니다 SHELL
.
환경 변수를 확인하려면 다음 명령을 입력하세요.
[max@localhost ~]$ env . . . HOSTNAME=localhost.localdomain 쉘=/bin/bash 히스트 크기=1000 사용자=최대 . . .
입력하는 동안 echo $SHELL
여기에 저장된 값이 모두 인쇄됩니다.
이 값은 부팅할 때마다 업데이트됩니다.