/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