`--login` 옵션을 사용하여 호출한 로그인 쉘에서 $0에서 단일 하이픈을 볼 수 없는 이유는 무엇입니까?

`--login` 옵션을 사용하여 호출한 로그인 쉘에서 $0에서 단일 하이픈을 볼 수 없는 이유는 무엇입니까?

man bash말한다,

 A login shell is one whose first character of argument zero is a -,  or
 one started with the --login option.

Cygwin 과 같은 터미널을 호출하면 $0에서 mintty -단일 하이픈( )을 볼 수 있습니다 .-

$ echo $0
-bash

그러나 옵션을 사용하여 로그인 쉘을 호출하면 을 --login볼 수 없습니다 -.

$bash --login
$echo $0
bash

내 질문은 다음과 같습니다

  1. 의 역할은 무엇입니까 -? 호출된 로그인 쉘에서는 볼 수 없지만 --login와 같은 관련 쉘 옵션을 쿼리하면 쉘 유형을 확인할 수 있습니다 shopt -q login_shell. 그것은 무엇을 위한 것입니까?

  2. 의 중요한 역할이 있는 경우 -로 호출된 로그인 쉘에서 이를 볼 수 없는 이유는 무엇입니까 --login?

  3. 인수가 0으로 시작하는 로그인 쉘을 수동으로 호출하려면 어떻게 해야 합니까 -?

  4. zsh, csh와 같은 다른 쉘의 경우도 마찬가지입니까?

답변1

프로세스 이름의 선행 대시( argv[0]정확히 말하면 )는 셸 login또는 이에 상응하는 프로세스를 호출하는 프로세스에 의해 배치됩니다. 이는 로그인 쉘(읽기 등)로 작동해야 함을 쉘 프로그램에 알려줍니다 .profile. 쉘 프로그램은 다른 상황에서 로그인 쉘로 작동하도록 선택할 수 있습니다(예를 들어 bash 및 zsh는 -l명령행 옵션이 전달되면 로그인 쉘로 작동합니다 ).

귀하의 질문에 답변하려면:

  1. 의 역할은 -쉘이 로그인 쉘처럼 작동하도록 지시하는 것입니다. Bash의 경우 --login명령줄을 전달하는 것은 동일합니다.
  2. 당신은 볼 수 있습니다의 역할-bash에서 --login옵션을 사용하여 호출하면 읽는 ~/.profile등의 작업이 수행됩니다. -bashbash가 as로 호출되지 않았기 때문에 bash가 as로 호출되었는지 bash --login확인할 -bash수 없습니다 -bash.
  3. 일반적인 쉘에서는 0번째 인수를 선택할 수 없으며 명령 이름이어야 합니다. zsh를 사용하면 ARGV0=-bash bash, ksh93또는 bashzsh사용할 수 있습니다 (exec -a -bash bash). mksh또는 에서는 zsh할 수 있습니다 hash -- -bash=/bin/bash; -bash. 로 시작해야 하는 ln -s /bin/bash ./-bash; ./-bash전체이기 때문에 같은 것을 할 수 없습니다 . 할 수도 있지만 앞에 추가하는 불쾌한 부작용이 있습니다 .argv[0]-PATH=:$PATH; -bash""$PATH
  4. 예.

또한보십시오로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?

답변2

질문 1과 2

man bash당신이 질문에 제공하는 것의 일부로 매뉴얼 페이지는 다음과 같이 말했습니다.또는. 따라서 로그인 쉘을 시작하는 두 가지 방법이 있습니다.

  • 인수 0의 첫 번째 문자는 입니다 -.
  • --login 옵션으로 시작되었습니다.

양방향은 서로 독립적입니다. 인수 0의 첫 번째 문자가 다음인 쉘- ~ 해야 하다로그인 쉘이어야 합니다. 그러나 인수 0의 첫 번째 문자가 여전히 아닌 쉘은 -로그인 쉘일 수도 있고 아닐 수도 있습니다. 로 호출하면 로그인 셸입니다 --login.

로그인 쉘을 확인하는 또 다른 방법:

$ cuonglm at ~
$ bash --login
$ cuonglm at ~
$ grep -- -l /proc/$$/cmdline
Binary file /proc/7620/cmdline matches

질문 3

간단한 방법:

$ cuonglm at ~
$ sudo su -
% root at ~
% shopt -q login_shell && echo "Login shell" || echo "Not login shell"
Login shell

질문 4

AFAIK zsh이며 이 경우 csh와 동일합니다 .bash

관련 정보