왜 'echo $ 0'이 두 개의 다른 터미널에 대해 다른 결과를 제공합니까?


15

디렉토리로 이동 한 다음 마우스 오른쪽 버튼을 클릭하고 "터미널에서 열기"를 선택 하여 Ctrl+ Alt+ T와 다른 터미널을 사용하여 우분투에서 터미널을 열었습니다 .

나는 echo $0두 경우 모두에했다.

첫 번째 경우 :

$ echo $0
-bash

두 번째 경우 :

$ echo $0
/bin/bash

왜 이런 차이가 있습니까?


$ 0은 실행중인 프로세스의 이름을 반환합니다.
Ramesh

다른 사용자로 두 개의 터미널을 실행합니까?
cuonglm

같은 사용자를 사용합니다
CodeBlue


실제로 다른 터미널 에뮬레이터입니까 아니면 동일한 터미널 에뮬레이터의 두 인스턴스입니까? 둘 다 기본 터미널입니까?
terdon

답변:


16

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터미널에서 어떤 일이 일어나고 있는지 확인하십시오 (항상 동일한 터미널).

여기에 이미지 설명을 입력하십시오


12

차이점은 시작된 방식에 달려 있습니다. bash는 argv [0]에 따라 다르게 초기화됩니다 (다른 시작 스크립트를 읽습니다). 문자열이 하이픈 -으로 시작 -bash하면 로그인 쉘로 실행되고 그렇지 않은 경우 대화식 쉘로 실행됩니다. 또한 비 대화식 쉘 (즉, 쉘 스크립트)로 실행할 수 있습니다.

자세한 내용을 보려면 man bashINVOCATION 섹션 의 매뉴얼을 읽는 것이 가장 좋습니다 .


9

당신이 로그인 할 때 쉘이 시작되고,뿐만 아니라 같은 프로그램에 의해 시작 것 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, 당신이 당신의 별명 정의를 배치 할 위치들이었다.

간단히 말해, 쉘을 생성하는 애플리케이션은 쉘이 "로그인 쉘"이어야하는지 여부를 결정하는데,이 경우 '-'처음에는 일반 쉘인지 또는 일반 쉘 인지 결정해야합니다 . 대부분의 경우 대화식이 될 쉘은 로그인 쉘로 시작되며, 쉘은 인수 또는 스크립트에서 일부 명령을 실행 한 다음 종료는 일반 쉘입니다.

그러나 쉘을 시작하는 것은 응용 프로그램에 달려 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.