Bashの機能——起動ファイルの実行

3798 ワード

login shell


Bashがlogin shellとして呼び出されると、次のファイルのコマンドが順番に読み込まれ、実行されます.
  • /etc/profile(存在する場合)
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

  • 通常、/etc/profileには次のような文があります.
    if [ -d /etc/profile.d ]; then
      for i in /etc/profile.d/*.sh; do
        if [ -r $i ]; then
          . $i
        fi
      done
      unset i
    fi
    

    だから、/etc/profile.dディレクトリの下の*.shファイルもlogin shell起動時に実行されます
    Bashを呼び出すときに-noprofileオプションが使用されている場合、上記のファイルはlogin shell起動時に実行されません.
    login shell終了時に実行
  • ~/.bash_logout(存在する場合)
  • 非login shell、インタラクティブshell


    Bashがインタラクティブshellとして機能し、login shell呼び出しではない場合は、次のファイルのコマンドを読み取り、実行します.
  • ~/.bashrc

  • Bashを呼び出すときに-norcオプションが使用されている場合、上記のファイルはインタラクティブshell起動時に実行されます.-rcfile fileオプションを使用して、~/ではなく、インタラクティブshellの起動時に実行するファイルを指定します.bashrc
    通常、login shellの起動ファイル~/.bash_profile, ~/.bash_loginと~/.profileには次のような言葉があります.
        if [ -f "$HOME/.bashrc" ]; then
            . "$HOME/.bashrc"
        fi
    

    だから-~/.bashrcもlogin shell起動時に実行されます

    非対話型shell


    非対話的にBashを起動すると(shellスクリプトの実行など)、Bashは環境内で変数BASH_を検索します.ENV、BASH_ENVが存在する場合は拡張され、読み取りおよび実行するファイルとして拡張された値が使用されます.Bashの動作は、次のコマンドを実行するのと同じです.
    if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
    

    ただし、PATH変数の値はファイル名の検索には使用されません.
    まとめてみます.
    インタラクティブシェル
    非対話型shell
    login shell
    /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc
    /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile, BASH_ENV
    非login shell
    ~/.bashrc
    BASH_ENV

    sh


    名前shを使用してBashを呼び出すと、起動ファイルは次のようになります.
    インタラクティブシェル
    非対話型shell
    login shell
    /etc/profile, ~/.profile, ENV
    起動ファイルがありません
    非login shell
    ENV
    起動ファイルがありません
    -noprofileオプションは、このlogin shellの起動ファイル実行起動ファイル実行を禁止するために使用できます.実行後、BashはPOSIXモードに入ります.

    bash --posix


    インタラクティブシェル
    非対話型shell
    login shell
    ENV
    起動ファイルがありません
    非login shell
    ENV
    起動ファイルがありません

    リモートshell daemonに呼び出される(rshd,sshd)


    bash
    sh
    ~/.bashrc
    起動ファイルがありません

    バッシュ呼び出し時に有効ユーザ(グループ)IDと実ユーザ(グループ)IDが一致しない場合


    起動ファイルがないと実行されます