私が知っている限り、少なくとも最も広く使用されているシェルは、ログインシェルとして機能するのか非ログインシェルとして機能するべきかを示す指標としてargv [0]を使用します。 argv [0]が "-"で始まる場合、シェル(少なくともbashとzsh)はログインシェルとして機能します。このダッシュは元のパラメータのどこに追加されますか?シェルは、ログインシェルであるべきかどうかを自分で決定しますか、それともログインまたは初期化によって実行されますか?
次のプログラムを検討してください(名前を「Test」と指定)。
int main (int argc, char *argv[]){
printf("first argument: %s\n", argv[0]);
return 0;
}
このプログラムがシェルから呼び出されると、「最初の引数:テスト」が表示されます。シェルプログラム(zshなど)がシェルから呼び出されると、$ 0変数は「zsh」です。ただし、passwd(5)でユーザーのデフォルトのログインシェルがzshとして定義されている場合、$ 0変数は最初のログイン後に「-zsh」になります。ユーザーのデフォルトシェルをテストに変更すると、上記のプログラムはログイン後も「-test」の代わりに「test」を印刷します。
したがって、argv [0]はいくつかのexec()呼び出し(どこで)によって設定されるか、シェル自体によって設定されますか(どの条件に応じて?)。
この質問は次のように異なります。ログインシェルでlogiを使用して呼び出すときに0から単一のハイフンが表示されないのはなぜですか?。ダッシュ文字の機能と手動で変更する方法を尋ねます。一般的な使用法では、argv [0]に追加する場所を尋ねません。しかし、他のスレッドで最も人気のある答えは、ログインがargv [0]への変更を担当すると主張しています。このメカニズムに関する情報はまだ不足しています。 zshを-zshに変更し、testを-testに変更しないのはなぜですか?