`--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 -1 つのハイフン ( ) が表示されます。-

$ echo $0
-bash

しかし、オプション付きでログインシェルを呼び出すと--login、 は表示されません-

$bash --login
$echo $0
bash

私の質問は次のとおりです:

  1. の役割は何ですか-? 呼び出されたログインシェルでは見ることができませんが--login、 のような関連するシェルオプションを照会するだけでシェルの種類を確認できますshopt -q login_shell。 それは何のためにあるのですか?

  2. に重要な役割があるのなら-、 で呼び出されたログインシェルでそれが表示されないのはなぜでしょうか--login?

  3. ゼロ引数が で始まるログインシェルを手動で呼び出すにはどうすればよいですか-?

  4. zsh、csh などの他のシェルでも同様でしょうか?

答え1

プロセス名 (正確には ) の先頭のダッシュは、シェル (またはそれと同等のもの) をargv[0]呼び出すプロセスによって配置されます。これは、シェル プログラムにログイン シェルとして動作するように指示します ( などを読み取る)。シェル プログラムは、他の状況ではログイン シェルとして動作することを選択できます (たとえば、bash と zsh は、コマンド ライン オプションが渡された場合、ログイン シェルとして動作します)。login.profile-l

ご質問にお答えします:

  1. の役割は、-シェルにログイン シェルとして動作するように指示することです。bash の場合、--loginコマンド ラインを渡すことは同等です。
  2. あなたは見ることができますの役割-bash が オプション付きで呼び出されると--login、 と表示されます。bash が として呼び出されなかったため、 ではなくとして呼び出されたかどうか~/.profileはわかりません。-bashbash --login-bash-bash
  3. 一般的なシェルでは、0 番目の引数は選択できません。コマンド名にする必要があります。zsh では、ARGV0=-bash bashと を で実行できますksh93bashまたはではzsh、 を実行できます。または では、 を実行できます。全体がで始まる必要があるため、 のようなことはできません。 を実行することもできますが、の前にが追加されるという厄介な副作用があります。(exec -a -bash bash)mkshzshhash -- -bash=/bin/bash; -bashln -s /bin/bash ./-bash; ./-bashargv[0]-PATH=:$PATH; -bash""$PATH
  4. はい。

参照ログイン シェルと非ログイン シェルの違いは何ですか?

答え2

質問1と2

あなたの質問で述べられていることとは別にman bash、マニュアルページにはこう書いてあるまたはログイン シェルを起動するには 2 つの方法があります。

  • 引数 0 の最初の文字は a です-
  • --login オプションで開始しました。

2つの方法は互いに独立しています。引数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

zsh私の知る限り、この場合もcsh同様です。bash

関連情報