터미널에 "vim filename"이라고 쓰면 vim이 파일 이름을 인수로 받는다는 것을 알지만 프로그램도 vim을 인수로 받는 것 같습니다... 그냥 터미널 에뮬레이터인가요 아니면 다른 프로그램인가요?
답변1
명령줄에 입력 하면 vim filename
셸이 이미 시작되었으므로 셸(및 터미널 에뮬레이터)은 vim
명령줄 인수로 사용하지 않습니다.
vim
는 반면에 가능하지만 사용자는 이를 사용할 수 없습니다. 프로그램이 시작되면 이름은 다음과 같습니다.대개0번째 명령줄 인수로 제공됩니다. 셸을 시작하고 에코하면 이를 확인할 수 있습니다 $0
.
$ sh
$ echo $0
sh
$ exit
쉘 execve()
(또는 유사한 exec()
기능)을 사용하여 명령줄에서 명령을 실행합니다.POSIX 사양설명하다
의 값은
argv[0]
함수 중 하나에 의해 시작된 프로세스와 관련된 파일 이름 문자열을 가리켜야 합니다exec
.
argv[0]
위의 텍스트는 $0
쉘 스크립트에 해당합니다.
근거 섹션은 계속됩니다.
POSIX를 엄격하게 준수하는 애플리케이션에 대한 요구 사항에는 다음 사항도 명시되어 있습니다.첫 번째 인수로 전달된 값은 시작되는 프로세스와 관련된 파일 이름 문자열입니다.. 일부 기존 응용 프로그램이 파일 이름 문자열 대신 경로 이름을 전달하는 경우도 있지만 파일 이름 문자열은 일반적으로
argv[0]
진단 인쇄에 사용되므로 더 유용합니다. 어떤 경우에는 전달된 파일 이름이 파일의 실제 파일 이름이 아닙니다. 예를 들어 로그인 유틸리티의 많은 구현에서는 호출 명령 해석기에 "login"임을 나타내는 실제 파일 이름 앞에<hyphen-minus>
( )를 붙이는 규칙을 사용합니다.-
껍데기".