「非ログイン」シェルの代わりに「ログイン」シェルを使用するのはなぜですか?

「非ログイン」シェルの代わりに「ログイン」シェルを使用するのはなぜですか?

私は基本的な理解を持っています。ファイルをクリック*nixシステムで。しかし、私はまだこの部分が混乱しています。ログインシェルと非ログインシェルの違いは何ですか?

複数の重複を含むさまざまな回答が、次の問題を解決しました。

  • どのように移動するログインまたはログインしていませんシェル
  • どのように発覚ログインまたはログインしていませんシェル
  • 起動ファイル消費されるログインまたはログインしていませんシェル
  • man bash詳細については、マニュアル(例:)を参照してください。

答えが私たちに知らせないもの(そして私がまだ混乱しているもの)は次のとおりです。

  • 何ですかはいの一つログインまたはログインしていませんシェル? (例えば、私はこれだけを構成しましたが、ほとんどの個人開発要件に十分でzshrcあり、「何をすべきか」zshほど単純ではないことを知っています。)vimrcvim

  • 何ですか理由使うログイン~上ログインしていませんシェル(他の起動ファイルとライフサイクルを使用することに加えて)?

ベストアンサー1

アイデアは、ホストにユーザーごとに(最大)1つのログインシェルがあることです。 (おそらく、ホストごとに端末ごとに1つのログインシェルと言う必要があります。複数の端末を介して同時にホストにログインしている場合は、複数のログインシェルがあると予想できます。)これは通常(常に?)最初ログイン後に取得するシェル(したがって名前)です。したがって、このスキームを使用すると、ログインごとに一度だけ発生するアクションと、新しい(対話型)シェルが起動するたびに発生するアクションを指定できます。

通常、すべてログイン後に実行される他のシェルはログインシェルの子孫(子孫の子孫...)になるため、umaskログインシェルから多くの設定(環境変数など)を継承します。したがって、ログイン初期化ファイル(.login.profileなど)は、継承可能な設定を設定し(または使用する他のファイル)が.bashrc(、、エクスポートされていないシェル変数)などではない設定を処理するようにする必要があります。 )setshopt

もう1つの概念は、ログイン初期化ファイル(およびそのファイルのみ)が「過度のタスク」、つまりリソー​​ス集約的なタスクを実行する必要があることです。たとえば、ログイン時に一部のプロセスがバックグラウンドで実行されるようにしたい場合があります(ただし、コピー(インスタンス)は1つのみ)。ログイン時にいくつかのステータス情報(たとえば、またはdf)を表示したい場合がありますが、who新しい対話型シェルを起動するたびに表示することはできません。特にお持ちの場合インタラクティブログインするたびにプログラム/ダイアログボックスを実行するには(たとえば、ユーザー入力を必要とするプログラムなど)、新しいシェルを起動するたびにプログラム/ダイアログボックスを実行したくありません。極端な例を挙げると、20年前のSolarisでは、グラフィックやウィンドウではなく単一のシェルにログインできました。 (それ以降は変更されたと思います。)または.login(または何でも)作業は、.profile次のコマンドを使用してWindowsシステムを起動することです。 (複数のウィンドウシステムが利用可能なため、部分的に便利です。ユーザーごとに好みが異なります。一部のユーザーは状況によって異なるシステムを使用し、「今日どのウィンドウシステムを使用しますか?」とstartx尋ねるダイアログボックスが表示されます。).profile明らかに、新しいウィンドウを開くか入力するたびに実行したくないでしょうsh

bash エッジケース以外の用途では使用してから古くなっています。 (たとえば、一部のコンテンツを作成したり、スクリプトを#!/bin/sh使用したり)パターンが異なる場合があります。デフォルトのシェル(で定義されている)がある場合は、ログインシェルを呼び出してから、そのシェルに依存するいくつかの対話型の非ログインシェルを呼び出すことができます。あるログインシェルが同じタイプの別のログインシェルに依存することは避けてください。dashbashcshtcshbashzsh/etc/passwdbashzshzsh

で述べたようにログインシェルと非ログインシェルの違いは何ですか?、OS Xターミナルアプリケーションはログインシェルを実行するため、通常のユーザーは同時に複数の「ログインシェル」を実行することがよくあります。これは上記のものとは多少異なるモデルであり、ユーザーが自分のファイルまたは.login(または他の)ファイル.profileで何をしているかを再検討する必要があるかもしれません。 OS X開発者がこれらの設計決定の理論的根拠を文書化したかどうかは不明です。しかし、この場合は役に立つと思います。ログインするときに、いくつかのシェルウィンドウを習慣的に開き、別のテキストと背景色に設定したことがありました(画面にANSIエスケープシーケンスを作成して)。どちらがどのウィンドウかを追跡するのに役立ちました。端末の色は子に継承されませんが、ウィンドウ全体にわたって持続する色の例です。したがって、これは新しいターミナルウィンドウを起動するたびにやりたいことですが、新しいインタラクティブシェルを起動するたびにやりたいことではありません。

おすすめ記事