`--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でターミナルを呼び出すと、mintty -$ 0がハイフン(-)で始まることがわかります。

$ echo $0
-bash

ただし、オプションを使用してログインシェルを呼び出すと、--loginこれは表示されません-

$bash --login
$echo $0
bash

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

  1. の機能は何ですか-?呼び出されたログインシェルではこれを見ることはできませんが、関連する--loginシェルオプション(たとえばshopt -q login_shell、何に使用されますか?)を照会できます。

  2. 重要な役割がある場合、-ログインシェルが呼び出されたときにこれを見ることができないのはなぜですか--login

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

  4. zshやcshのような他のシェルでも同じですか?

ベストアンサー1

プロセス名の前のダッシュ(argv[0]正確にはin)は、loginシェル(または他の同様のプロセス)を呼び出したプロセスによって配置されます。これは、ログインシェル(読み取りなど)として機能する必要があることをシェルプログラムに通知します.profile。シェルプログラムは、異なる状況でログインシェルとして機能することを選択できます(たとえば、コマンド-lラインオプションが渡されると、bashとzshはログインシェルとして機能します)。

あなたの質問に答えるには:

  1. 目的は、-シェルにログインシェルとして機能するように指示することです。 Bashの場合、--loginコマンドラインを渡すことは同じです。
  2. あなたは見ることができます性格-Bashのオプションを使用して呼び出されます。などを--login読んでください。 bashがasとして呼び出されないため、bashがasとして呼び出されるかどうかはわかりません~/.profile-bashbash --login-bash-bash
  3. 一般的なシェルでは、0番目の引数を選択することはできず、コマンド名でなければなりません。 zshを使用すると、またはを使用ARGV0=-bash bashして次のことができます。またはでこれを行うことができます。そのようなことは最初から始めなければならないことなのでできません。これは可能ですが、以前に追加された不快な副作用があります。ksh93bashzsh(exec -a -bash bash)mkshzshhash -- -bash=/bin/bash; -bashln -s /bin/bash ./-bash; ./-bashargv[0]-PATH=:$PATH; -bash""$PATH
  4. はい。

また、見ることができますログインシェルと非ログインシェルの違いは何ですか?

おすすめ記事