man bash
설명하다,
A login shell is one whose first character of argument zero is a -, or
one started with the --login option.
Cygwin에서 터미널을 호출하면 mintty -
$0이 하이픈( -
)으로 시작하는 것을 볼 수 있습니다.
$ echo $0
-bash
그러나 옵션을 사용하여 로그인 쉘을 호출하면 --login
이를 볼 수 없습니다 -
.
$bash --login
$echo $0
bash
내 질문은 다음과 같습니다
의 기능은 무엇입니까
-
? 호출된 로그인 셸에서는 이를 볼 수 없지만--login
관련 셸 옵션(예shopt -q login_shell
: . 무엇에 사용됩니까?) 을 쿼리할 수 있습니다.중요한 역할이 있는 경우
-
로그인 쉘이 호출될 때 이를 볼 수 없는 이유는 무엇입니까--login
?로 시작하는 인수가 없는 로그인 쉘을 수동으로 호출하려면 어떻게 해야 합니까
-
?zsh 및 csh와 같은 다른 쉘에서도 마찬가지입니까?
답변1
프로세스 이름의 선행 대시( argv[0]
정확하게 말하면 in)는 login
셸(또는 기타 유사한 프로세스)을 호출한 프로세스에 의해 배치됩니다. 이는 로그인 쉘(읽기 등) 역할을 해야 함을 쉘 프로그램에 알려줍니다 .profile
. 쉘 프로그램은 다른 상황에서 로그인 쉘로 작동하도록 선택할 수 있습니다(예를 들어 -l
명령줄 옵션이 전달되면 bash 및 zsh는 로그인 쉘로 작동합니다).
귀하의 질문에 답변하려면:
- 목적은
-
쉘이 로그인 쉘 역할을 하도록 지시하는 것입니다. Bash의 경우--login
명령줄을 전달하는 것은 동일합니다. - 너는 볼 수있어성격
-
Bash에서 옵션을 사용하여 호출됩니다. 등을--login
읽습니다 . bash가 as로 호출되지 않기 때문에 bash가 as로 호출되는지 여부를 알 수~/.profile
없습니다 .-bash
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의 첫 번째 문자는 a의 쉘입니다.-
~ 해야 하다로그인 쉘입니다. 그러나 매개변수 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