web-dev-qa-db-ja.com

**ログイン**シェルを**非ログイン**シェルよりも優れているのはなぜですか?

* nixシステムのdotfilesの基本的な知識があります。しかし、私はこれについてまだかなり混乱しています ログインシェルと非ログインシェルの違い?

多数の異なる回答(複数の重複を含む)は、すでに次の箇条書きに対処しています。

  • invoke a loginまたはnon-login Shellの方法
  • 方法検出 a ログインまたは非ログインシェル
  • スタートアップファイルログインまたは非ログインシェルによって使用されるもの
  • ドキュメントを参照(例:man bash) 詳細については

答えが教えてくれなかった(そして私がまだ混乱しているものも):

  • loginまたはnon-loginシェルのse caseとは何ですか? (たとえば、zshrczshに設定しただけで、ほとんどの個人的な開発要件にはこれで十分です。vimrcからvimほど単純ではないことを知っています)

  • 理由非ログインシェルでログインシェルを使用するには(異なる起動ファイルとライフサイクルを消費する以外に)?

32
Xlee

つまり、ユーザーはホストごとに(最大で)1つのログインシェルを持つ必要があります。 (おそらく、ターミナルごとにホストごとに1つのログインシェル—複数のターミナルを介してホストに同時にログインしている場合、複数のログインシェルがあると予想されます。)通常、これは(常に?)firstログイン時に取得するシェル(したがって、名前)。したがって、このスキームでは、ログインごとに1回だけ実行するアクションと、新しい(インタラクティブな)シェルを起動するたびに実行するアクションを指定できます。

通常、everyログイン後に実行する他のシェルは、ログインシェルの子孫(子の子の子…)になるため、ログインシェルから多くの設定(環境変数、umaskなど)を継承します。そして、それに応じて、ログイン初期化ファイル(.login.profileなど)は継承可能な設定を設定し、.bashrc(またはその他の使用するもの)を許可するという考え方です。ないものを処理する(setshopt、エクスポートされていないシェル変数など)

もう1つの概念は、ログイン初期化ファイル(およびそれらのみ)が「大量のデータを持ち上げる」、つまりリソー​​スを大量に消費するアクションを実行することです。たとえば、ログインしているときは常に特定のプロセスをバックグラウンドで実行したい場合があります(ただし、プロセスの1つのコピー(インスタンス)のみ)。ログイン時にステータス情報(dfまたはwhoなど)を表示したい場合がありますが、新しいインタラクティブシェルを起動するたびに表示する必要はありません。特に、ログインするたびに実行したいinteractiveプログラム/ダイアログ(つまり、ユーザーからの入力を要求するもの)がある場合、おそらく新しいシェルを起動するたびに実行する必要はありません。極端な例として、20年前に、Solarisは単一の非グラフィカルな非ウィンドウシェルにログインしました。 (それ以来変更されていると思います。)startxのようなコマンドを使用してウィンドウシステムを起動するのは、.loginまたは.profile(または何でも)の仕事でした。 (これは、複数のウィンドウシステムが利用可能だったために一部役立ちました。ユーザーごとに好みが異なりました。一部のユーザーは異なる状況で異なるシステムを使用しており、.profileに「どのウィンドウシステムを使用しますか?今日使用しますか?」)明らかに、新しいウィンドウを開いたりshを入力したりするたびに実行したくないでしょう。

Edgeのケースを除いて、bash以外のものを使用してからの年月です。 (たとえば、私は#!/bin/shを使用してスクリプトを記述しているため、一部のシステムでは、私のスクリプトはdashで実行され、他のシステムではPOSIXモードでbashで実行されます。年に数回csh/tcshを数分間実行して、何かがどのように処理されるかを確認するか、質問に答えます。)複数のシェルを使用する場合(例:bashおよびzsh)日常的に、あなたのパターンは異なる場合があります。プライマリシェル(/etc/passwdで定義されている)がbashの場合、zshログインシェルを呼び出してから、インタラクティブな非ログインzshシェルを呼び出すことができます。その従属。同じタイプの別のログインシェルに従属するログインシェルを使用することは避けてください。

ログインシェルと非ログインシェルの違い? で説明したように、OS Xターミナルアプリケーションはログインシェルを実行するため、一般的なユーザーは通常、複数の「ログインシェル」を同時に実行します。これは、上で説明したものとは少し異なるモデルであり、ユーザーが.loginまたは.profile(またはその他の)ファイルで何をするかを考え直す必要があるかもしれません。 OS Xの開発者がこの設計決定の根拠を文書化したかどうかはわかりません。しかし、これが役立つ状況を想像できます。ログインしたときに、いつも少数のシェルウィンドウを開いていた時期があり、(ANSIエスケープシーケンスを画面に書き込むことで)異なるテキストと背景色に設定して、どれがどれかを追跡できるようにしました。端末の色は、子供たちに継承されないものの例ですが、ウィンドウ内には存続します。したがって、これは、新しいターミナルウィンドウを起動するたびに行いたいことですが、新しいインタラクティブシェルを起動するたびには行いません。