回答:
あなたがUbuntu Desktopの通常のユーザーである場合、唯一のログインシェルは...デスクトップです(ログインするにはパスワードを入力します;)?まあ、技術的にはGUIを起動するのはログインシェルですが、専門用語を使用しています。そして、はい、それは設定を読み込みます.profile
あなた(通常のユーザー)がログインシェルのように見えるログインシェルを表示するのは、デスクトップに問題があり、Ctrl+ Alt+ F1ショートカットで仮想端末に切り替える場合だけです。
ssh(またはローカルでに接続するssh localhost)bash -l(またはsh -l)を使用して初期ログインシェルをシミュレートするrootログインシェルをシミュレートするsudo -i
sudo -u username -irootrootと、ユーザー(とそのパスワード)su - usernamesudo loginコマンドを使用してユーザーを切り替える~/.pam_environment(変数のみ、bashコマンドなし)に入れ、ログアウト、ログインし、すべてがデスクトップとgnome-terminalに魔法のように表示されるのを見てください!
/etc/profile、/etc/profile.dまたは~/.profile。
「専門用語」がなければ正しい答えが得られるとは思いません。この質問は、「ログインシェルとは何か」というクエリに対してGoogleで最初に表示される質問なので、以下のより正確な答えを提供します。
ログインシェルは、単にログインシェルであると言われたシェルです。ログイン後にポップアップするシェルを意味するものではありませんが、通常、ログインするアプリケーションはシェルにログインシェルとして起動するように指示します。ログインする必要があることをシェルに伝えるには、次の方法があります。
-lまたは--loginそれを知っていると仮定してシェルを実行します(知らないシェルは知りませんが-l、--loginいくつかのシェルでのみサポートされています)。argv[0]設定してシェルを実行します-{some_string}(つまり、通常argv[0]または他の文字列の前にHYPHEN-MINUSを追加します)。これはsshとsuが行うことです:suは単に-suasで実行可能ファイルを実行しargv[0](argv[0]現在実行中の実行可能ファイル名と関係があると考えているすべての人にこんにちは)、-zshユーザーが/bin/zshシェルとして設定したときにsshがzshを実行します。シェルのLoginessは、パスワードを尋ねたり、他の認証手順を実行したりすることとはまったく関係ありません。sshやlogin(またはurxvtなどのターミナルエミュレーター)のようないくつかのプログラムargv[0]は、HYPHEN-MINUSで始まるログインシェルとしてシェルを実行します。suやsudo(またはzsh:の-セクションPRECOMMAND MODIFIERSで説明されているプリコマンド修飾子を参照man zshmisc)のようなものは、デフォルトではこれを行いませんが、そうすることができます。引数を使用してシェルにログインシェルを指定する唯一のオプション(シェルなど)がありますbash -l:コマンド引数付きのssh(リモートエンドで実行するものをsshに明示的に指定)。
一般に、最初にシェルを起動するために使用されるプログラムのドキュメントを参照して、シェルがログイン1であるかどうかを確認し、次にアプリがログインシェルを起動するかどうかを確認するテストを実行することをお勧めします(例:に追加echoする.profile)。
argv[0]1つに直接供給することで行われます。コマンドの実行と異なることを望まない場合でも、関数を使用するときは、実際に実行するコマンドの両方とパスを常に提供します。他の言語は独自の方法を提供します。具体的にbashが使用することができますが、これは、もちろん、あなたは何でシェルを実行している現在、置き換えられます編なので、あなたはサブシェル(使用する必要があります)exec* argv[0]exec*argv[0]exec -a new_argv0 bashexec(exec -a -zsh zsh)
$0、また、おそらく他の何か(変数、設定など)が設定されて、シェルのログが構成ファイルで検出される可能性がありますが、実際にこれを検出して違いを生むのは誰ですか?私が知っているのはそれで全てです。