web-dev-qa-db-ja.com

「ログイン」と「インタラクティブ」bashシェルの違いは何ですか

「ログイン」と「インタラクティブ」bashシェルの違いは何ですか?私は以下のウィキペディアを引用しましたが、誰でもより良い答えを出すことができますか?

編集:これはコミュニティのwikiなので、閉じるのに投票するのではなく、どのタイプの$ Shellを必要とする状況の例を提供できます

起動スクリプト

Bashが起動すると、さまざまなスクリプトでコマンドが実行されます。

Bashが対話型ログインシェルとして呼び出されると、/ etc/profileファイルが存在する場合、そのファイルからコマンドを読み取り、実行します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、存在し、読み取り可能な最初のコマンドからコマンドを読み取って実行します。

ログインシェルが終了すると、Bashは〜/ .bash_logoutファイル(存在する場合)からコマンドを読み取って実行します。

ログインシェルではないインタラクティブシェルが起動すると、Bashは〜/ .bashrcからコマンドを読み取って実行します(そのファイルが存在する場合)。 --norcオプションを使用すると、これを禁止できます。 --rcfile fileオプションは、Bashが〜/ .bashrcの代わりにfileからコマンドを読み取って実行するように強制します。

50
Gareth

ログインシェルのプロファイルファイルでは、セッション中に使用するいくつかの設定を行うことができます。これらは一度だけ実行する必要があります。いくつかのアイデア:

  • 接続元のIPアドレスを含む一時ファイルを作成します。後で、ファイアウォールルールを設定するスクリプトにそれを含めることができます。
  • ssh-agentを実行し、SSHキーを要求し、SSHエージェント環境変数をファイルに保存します。
  • それが限定されたマシンであり、同僚がお互いのログインを認識したい場合は、あなたのログインを知らせるwrite(1)メッセージを送信します。

非ログインシェルのファイル(.bashrc)では、シェルを構成する必要があります。

  • 派手なプロンプト
  • エイリアスを設定する
  • 履歴オプションを設定する
  • カスタムシェル関数を定義する
  • 環境変数をエクスポートします(システム全体の設定に問題がある場合は、おそらくPAGER、EDITOR)。
  • .bash_profileに保存されたssh-agent変数をロードする

通常、.bashrc.bash_profileを次のように含めます。次に、ログインシェルはすべてのカスタマイズを取得し、.bash_profileファイルは、.bashrcに既にあるものを複製する必要はありません。

[[ -f ~/.bashrc ]] && . ~/.bashrc
16
hayalci