bash 프롬프트에서 잘못된 명령을 입력하면 메시지가 나타납니다.
-bash: {command}: command not found
-
처음에 무엇을 의미합니까?
답변
로그인 쉘임을 의미합니다.
보낸 사람 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
답변
다른 대답은 괜찮아 보이지만 기능이 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의 반 최신 버전)이 있습니다.