‘command not found’오류에서`bash` 앞의 대시`-`는 무엇을 의미합니까? 명령을 입력하면 메시지가 나타납니다. -bash: {command}: command

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.
 */

모든 쉘은 선행 대시를 인식합니다. 동등한 -lBourne 옵션은 기존 Bourne 쉘 또는 원래 csh에는 없지만 대부분의 최신 쉘 (bash, dash, ksh, yash, tcsh, zsh, rc, es, fish 및 cs의 반 최신 버전)이 있습니다.


답변