디렉토리로 이동 한 다음 마우스 오른쪽 버튼을 클릭하고 "터미널에서 열기"를 선택 하여 Ctrl+ Alt+ T와 다른 터미널을 사용하여 우분투에서 터미널을 열었습니다 .
나는 echo $0
두 경우 모두에했다.
첫 번째 경우 :
$ echo $0
-bash
두 번째 경우 :
$ echo $0
/bin/bash
왜 이런 차이가 있습니까?
디렉토리로 이동 한 다음 마우스 오른쪽 버튼을 클릭하고 "터미널에서 열기"를 선택 하여 Ctrl+ Alt+ T와 다른 터미널을 사용하여 우분투에서 터미널을 열었습니다 .
나는 echo $0
두 경우 모두에했다.
첫 번째 경우 :
$ echo $0
-bash
두 번째 경우 :
$ echo $0
/bin/bash
왜 이런 차이가 있습니까?
답변:
echo $0
명령 출력이 로그인 쉘로 호출 -bash
되었음을 의미합니다 bash
. 출력이 only bash
이면 로그인하지 않은 쉘에있는 것입니다.
man bash
126 행 어딘가에 말합니다 :
A login shell is one whose first character of argument zero is a -, or one started with the --login option.
더 여기에 대해 참조 : 로그인 쉘과 비 로그인 쉘의 차이를? .
이제 /bin/bash
두 번째 경우에 대한 이유를 설명하기 위해 프로그램 (예 : 파일 관리자, 아마도 노틸러스) 또는 스크립트가 다른 것으로 변경할 수 있다고 말할 수 있습니다 $0
. 예를 들어 $0
터미널에서 어떤 일이 일어나고 있는지 확인하십시오 (항상 동일한 터미널).
당신이 로그인 할 때 쉘이 시작되고,뿐만 아니라 같은 프로그램에 의해 시작 것 make
, 또는 쉘 스크립트를 실행할 때, 또는 입력 할 때 :sh
까지 vi
또는 새 터미널 창을 만들 때.
원래 쉘은 ~/.profile
로그인하거나 실행할 때 읽었 습니다 su
. 이 스크립트는 새 이메일이 있는지 여부를 알리고 지우기 및 종료 문자를 사용자 정의하며 TERM 및 PATH 변수를 설정하고 내보내는 등의 작업을 수행합니다. 거의 모든 다른 상황에서 시작했을 때 쉘은 읽지 못했습니다 ~/.profile
. 왜냐하면 대부분의 작업을 수행하는 것이 중복되기 때문입니다. 중요한 쉘 변수를 새 쉘로 내 보내야합니다.
쉘이 읽어야할지 알 수있는 방법은 ~/.profile
의 첫 번째 문자가 argv[0]
일명 인지 아닌지를 확인하는 $0
것이었다 '-'
.
로 시작하여 csh
별칭이 도입되었습니다. 환경에서 별칭을 내 보내지 않았습니다. csh
두 개의 서로 다른 초기화 스크립트를 읽도록 설계되었습니다. ~/.login
는 사용자가 로그인했을 때만 읽었으며이 작업의 argv[0]
시작은로 시작했습니다 '-'
. ~/.cshrc
쉘이 시작될 때마다 읽혔습니다. 일반적으로에 별칭을 ~/.cshrc
넣고에 모든 것을 넣었 습니다 ~/.login
. csh
또한 ~/.logout
대부분의 경우 화면을 지우고 실행했습니다 fortune
.
다른 쉘도 이와 동일한 기능을 채택했습니다. ksh
읽을 것 ~/.kshrc
, bash
읽을 것 ~/.bashrc
, 당신이 당신의 별명 정의를 배치 할 위치들이었다.
간단히 말해, 쉘을 생성하는 애플리케이션은 쉘이 "로그인 쉘"이어야하는지 여부를 결정하는데,이 경우 '-'
처음에는 일반 쉘인지 또는 일반 쉘 인지 결정해야합니다 . 대부분의 경우 대화식이 될 쉘은 로그인 쉘로 시작되며, 쉘은 인수 또는 스크립트에서 일부 명령을 실행 한 다음 종료는 일반 쉘입니다.
그러나 쉘을 시작하는 것은 응용 프로그램에 달려 있습니다.