로그인 쉘의 argv[0]은 어떻게 되었나요?

로그인 쉘의 argv[0]은 어떻게 되었나요?

내가 아는 한, 적어도 가장 널리 사용되는 쉘은 로그인 쉘로 작동해야 하는지 비로그인 쉘로 작동해야 하는지를 나타내는 지표로 argv[0]을 사용합니다. argv[0]이 "-"로 시작하면 쉘(적어도 bash 및 zsh)은 로그인 쉘로 작동합니다. 이 대시는 원래 매개변수의 어디에 추가됩니까? 쉘은 로그인 쉘이어야 하는지 자체적으로 결정합니까, 아니면 로그인 또는 초기화를 통해 수행됩니까?

다음 프로그램을 고려하십시오(이름을 "Test"로 지정).

int main (int argc, char *argv[]){
    printf("first argument: %s\n", argv[0]);
    return 0;
}

이 프로그램이 셸에서 호출되면 "첫 번째 인수: 테스트"가 표시됩니다. 쉘 프로그램(예: zsh)이 쉘에서 호출되는 경우 $0 변수는 "zsh"입니다. 그러나 passwd(5)에서 사용자의 기본 로그인 셸이 zsh로 정의된 경우 $0 변수는 첫 번째 로그인 후 "-zsh"가 됩니다. 사용자 기본 쉘을 테스트로 변경하면 위 프로그램은 로그인 후에도 "-test" 대신 "test"를 인쇄합니다.

따라서 argv[0]은 일부 exec() 호출(어디에서)에 의해 설정되거나 쉘 자체에 의해 설정됩니까(어떤 조건에 따라?).

이 질문은 다음과 다릅니다.로그인 쉘에서 logi를 사용하여 호출할 때 0부터 단일 하이픈이 표시되지 않는 이유는 무엇입니까?. 대시 문자의 기능과 수동으로 변경하는 방법을 묻습니다. 일반적인 사용법에서는 argv[0]에 추가할 위치를 묻지 않습니다. 그러나 다른 스레드에서 가장 인기 있는 답변은 로그인이 argv[0]에 대한 변경을 담당한다고 주장합니다. 이 메커니즘에 대한 정보는 아직 부족합니다. zsh를 -zsh로 변경하고 test를 -test로 변경하지 않는 이유는 무엇입니까?

관련 정보