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
내 질문은 다음과 같습니다
의 역할은 무엇입니까
-
? 호출된 로그인 쉘에서는 볼 수 없지만--login
와 같은 관련 쉘 옵션을 쿼리하면 쉘 유형을 확인할 수 있습니다shopt -q login_shell
. 그것은 무엇을 위한 것입니까?의 중요한 역할이 있는 경우
-
로 호출된 로그인 쉘에서 이를 볼 수 없는 이유는 무엇입니까--login
?인수가 0으로 시작하는 로그인 쉘을 수동으로 호출하려면 어떻게 해야 합니까
-
?zsh, csh와 같은 다른 쉘의 경우도 마찬가지입니까?
답변1
프로세스 이름의 선행 대시( argv[0]
정확히 말하면 )는 셸 login
또는 이에 상응하는 프로세스를 호출하는 프로세스에 의해 배치됩니다. 이는 로그인 쉘(읽기 등)로 작동해야 함을 쉘 프로그램에 알려줍니다 .profile
. 쉘 프로그램은 다른 상황에서 로그인 쉘로 작동하도록 선택할 수 있습니다(예를 들어 bash 및 zsh는 -l
명령행 옵션이 전달되면 로그인 쉘로 작동합니다 ).
귀하의 질문에 답변하려면:
- 의 역할은
-
쉘이 로그인 쉘처럼 작동하도록 지시하는 것입니다. Bash의 경우--login
명령줄을 전달하는 것은 동일합니다. - 당신은 볼 수 있습니다의 역할
-
bash에서--login
옵션을 사용하여 호출하면 읽는~/.profile
등의 작업이 수행됩니다.-bash
bash가 as로 호출되지 않았기 때문에 bash가 as로 호출되었는지bash --login
확인할-bash
수 없습니다-bash
. - 일반적인 쉘에서는 0번째 인수를 선택할 수 없으며 명령 이름이어야 합니다. zsh를 사용하면
ARGV0=-bash bash
,ksh93
또는bash
을zsh
사용할 수 있습니다(exec -a -bash bash)
.mksh
또는 에서는zsh
할 수 있습니다hash -- -bash=/bin/bash; -bash
. 로 시작해야 하는ln -s /bin/bash ./-bash; ./-bash
전체이기 때문에 같은 것을 할 수 없습니다 . 할 수도 있지만 앞에 추가하는 불쾌한 부작용이 있습니다 .argv[0]
-
PATH=:$PATH; -bash
""
$PATH
- 예.
답변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