Linuxおよび私の知る限り、すべてのUnixシステムでは、ターミナルエミュレータはデフォルトで対話型の非ログインシェルを実行します。これは、bashの場合、開始されたシェルが次のことを行うことを意味します。
ログインシェルではないインタラクティブシェルが開始されると、bashはこれらのファイルが存在する場合、
/etc/bash.bashrc
およびからコマンドを読み取り、実行します~/.bashrc
。--norc
オプションを使用すると、これを禁止 できます。
--rcfile
ファイルのオプションは、ファイルからコマンドを読み込み、実行するためにはbashを強制代わりのだろう/etc/bash.bashrc
と~/.bashrc
。
ログインシェルの場合:
bashが対話型ログインシェルとして、または
--login
オプション付きの非対話型シェルとして呼び出されると、bashは/etc/profile
、ファイルが存在する場合、まずfileからコマンドを読み取って実行します。そのファイルを読んだ後、それは探し~/.bash_profile
、~/.bash_login
、および~/.profile
、そのためには、および読み込み、存在し、読み取り可能である最初のものから実行するコマンドを。
--noprofile
シェルは、この動作を抑制するために開始されたときにオプションを使用することができます。
OSX上で、しかし、デフォルトのターミナル(Terminal.app)で起動(bashの場合)デフォルトのシェル実際にソース~/.bash_profile
や~.profile
などは言い換えれば、それは、ログインシェルのような役割を果たします。
主な質問:なぜデフォルトのインタラクティブシェルがOSXのログインシェルなのですか?OSXがこれを行うことにしたのはなぜですか?これは、~/.bashrc
OSX で変更を記述するシェルベースのものに関するすべての指示/チュートリアルがOSXで失敗することを意味します~/.profile
。それでも、多くの告発はAppleで平準化できるが、無能な開発者やばかげた開発者を雇うことはそれらの1つではない。おそらく、彼らにはこれには十分な理由があったのに、なぜですか?
サブ質問:Terminal.appは実際にインタラクティブなログインシェルを実行しますか、それともbashの動作を変更しましたか?これはTerminal.app固有のものですか、それとも端末エミュレーターから独立していますか?