답변:
로그인 쉘임을 의미합니다.
보낸 사람 man bash
:
로그인 쉘은 인수 0의 첫 문자가-이거나 --login 옵션으로 시작된 문자입니다.
( bash
용어에서 "제로"인수는 명령 이름입니다 bash
.) bash
는이를 실행 등과 같은 로그인 활동을 수행하는 신호로 사용합니다 .bash_profile
.
대시가 자동으로 추가되는 한 가지 방법은 쉘이로 시작하는 것 exec
입니다. 로부터 배쉬 설명서 :
exec [-cl] [-a name] [command [arguments]]
[...]
-l
옵션이 제공되면, 쉘은 command에 전달 된 0 번째 인수의 시작 부분에 대시를 배치합니다 .
이 두 가지 시도를 비교하여 명령을 실행하십시오 nonexistent
. 우선없이 -l
:
$ exec bash
$ nonexistent
bash: nonexistent: command not found
둘째,
$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
exec -l
대시를 앞에 추가 배쉬가로 실행 될 수 있습니다 가능한 방법입니다 -bash
,하지만 그 자체로 그게 로그인 쉘이라고 말할하지 않으며, 영업 이익은 사용되지 않았 음을 아주 좋은 기회가 exec -l
전혀은 . -bash
로그인 쉘을 만드는 문서의 일부 는 "INVOCATION"입니다. 로그인 쉘은 인수 0의 첫 문자가-이거나 --login 옵션으로 시작된 문자입니다.
bash
용어는 아니지만 Unix 규칙 + C 색인 작성 : 각 프로그램에는 매개 변수 목록이 전달되는데,이 매개 변수 목록에는 초기 항목이 프로그램 이름이며 그 뒤에 인수가옵니다. C 배열은 0부터 시작하여 인덱싱되므로 인수 0 (즉, 0 번째 인수)은 프로그램 이름이며 실제 인수는 인덱스 1로 시작합니다.
다른 대답은 괜찮아 보이지만 기능이 bash보다 일반적이라는 점은 언급 할 가치가 있습니다.
고대부터 login
프로그램은 argv[0]
사용자의 쉘을 실행할 때 대시를 추가 했으며, 쉘은이를 "로그인 쉘"로 작동해야한다는 표시로 인식했습니다. login (1) , sh (1) 의 V7 매뉴얼 페이지에 설명되어 있습니다 .
로그인과 유사한 서비스를 제공하는 (사용자 인증 및 셸 실행) 모든 프로그램은 "접두사 앞에 추가"규칙을 따라야합니다. 예를 들어, sshd는 ssh / session.c 에서이 주석 아래 에서 볼 수있는 것처럼 수행합니다 .
/*
* If we have no command, execute the shell. In this case, the shell
* name to be passed in argv[0] is preceded by '-' to indicate that
* this is a login shell.
*/
모든 쉘은 선행 대시를 인식합니다. 동등한 -l
Bourne 옵션은 기존 Bourne 쉘 또는 원래 csh에는 없지만 대부분의 최신 쉘 (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish 및 cs의 반 최신 버전)이 있습니다.
-l
옵션이 login
있지만 여전히 사용하지 않습니다. 모든 쉘은 argv[0]
"공식"메커니즘으로 접두사를 인식해야합니다 .
jhgjbjbkjln: command not found
- 아니-bash:
거기.bash
유닉스, 리눅스, OSX 등에서 사용 하고 있습니까? 어쩌면 이것이 기본적으로 오류 메시지 앞에 특정 구현이 있기 때문에 묻습니다. 아무 의미도 없습니다 ... 아마도.