MacOS:Macのログインおよび非ログインシェル用のシェル起動スクリプトは何ですか?

MacOS:Macのログインおよび非ログインシェル用のシェル起動スクリプトは何ですか?

/etc/profile, ~/.bash_profile, ~/.profile, ~/.bash_login私は新しいシェルを開くときに実行されるUbuntuの起動スクリプト(ログインシェルと /etc/bash.bashrc, ~/.bashrc非ログインシェル用)について学びました。 Ubuntuを実行しているコンピュータがあり、そのコンピュータの順序がこれと一致します。

しかし、MacOSでは、ファイルと実行順序が異なるようです。ホームディレクトリには/etc/bashありません。最も奇妙なことは、これらのファイルにechoステートメントを置くときにTerminal.appを開くたびに両方のファイルをクリックすることです。ログインシェルにいる場合は、最初のシェルをクリックしないでください。下記をご覧ください。最初の3行は私のエコドアで、4行目はログインシェルにあるという確認です。/etc/bash.bashrc~/.profile~/.bash_login/etc/profile/etc/bash

In /etc/profile
In /etc/bashrc
In ~/.bash_profile for user: davidkennell
Davids-MacBook-Pro:~ davidkennell$ shopt login_shell
login_shell     on

これまでに私が下した結論は、Macのシェル起動スクリプトは両方ともUnixベースであるにもかかわらず、Ubuntuとはまったく異なることです。 Macでログイン/非ログインシェルを初期化するとき、どのファイルがどの順序で実行されるかについての情報はどこで入手できますか?

ベストアンサー1

これは(ほとんど)で説明されています。スタートアップファイルのBashマニュアルセクション

簡単に言うと:

  • /etc/profileログインシェルで獲得

  • 次に、利用可能な最初の、~/.bash_profileおよび~/.bash_loginを取得します~/.profile

    Ubuntuにはデフォルトでまたはがないので ~/.bash_profileソースです。シェルがbashのときのUbuntu(まあ、Debian)のソースコード:~/.bash_login~/.profile~/.profile~/.bashrc

    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
        fi
    fi
    

    ~/.profileただし、これは他のディストリビューションやオペレーティングシステムではそうでないことがよくあります。

  • Debian (および Ubuntu) は以下を使用します。特別なオプション有効にするには、/etc/bash.bashrcこの機能はmacOSでは使用されません。代わりに、少なくともCatalinaでは、/etc/profileソース/etc/bashrc(Ubuntuに似ています~/.profile)は次のようになります。

    # cat /etc/profile
    # System-wide .profile for sh(1)
    
    if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
    fi
    
    if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
    fi
    

おすすめ記事