
터미널 '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
쉘 스크립트에 해당합니다.
근거 섹션에서는 계속해서 다음과 같이 말합니다.
Strictly Conforming POSIX 애플리케이션에 대한 요구 사항에는 다음과 같이 명시되어 있습니다.첫 번째 인수로 전달된 값은 시작되는 프로세스와 관련된 파일 이름 문자열입니다.. 일부 기존 응용 프로그램은 상황에 따라 파일 이름 문자열 대신 경로 이름을 전달하지만
argv[0]
진단 인쇄에 일반적으로 사용되므로 파일 이름 문자열이 더 일반적으로 유용합니다. 어떤 경우에는 전달된 파일 이름이 파일의 실제 파일 이름이 아닙니다. 예를 들어, 로그인 유틸리티의 많은 구현에서는 실제 파일 이름 앞에<hyphen-minus>
( ) 접두사를 붙이는 규칙을 사용합니다-
. 이는 호출되는 명령 해석기에 "로그인 쉘"임을 나타냅니다.