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
- はい。
また、見ることができますログインシェルと非ログインシェルの違いは何ですか?