为什么默认情况下OSX登录Shell上是交互式Shell?
在Linux和据我所知的所有Unix系统中,终端仿真器默认运行交互式非登录外壳。这意味着对于bash,启动的shell将: 当一个交互的shell但不是登录shell启动时,bash读取并执行命令/etc/bash.bashrc和~/.bashrc,如果这些文件存在。使用--norc 选项可以禁止这种情况 。 该--rcfile 文件选项将强制bash读取和文件,而不是执行命令/etc/bash.bashrc和~/.bashrc。 对于登录shell: 当bash作为交互式登录shell或带有--login选项的非交互式shell被调用时,它首先从文件/etc/profile(如果该文件存在)中读取并执行命令。读取文件后,它会查找~/.bash_profile,~/.bash_login以及~/.profile以该顺序,并读取并从存在并且可读的第一个执行命令。 --noprofile启动外壳程序以禁止此行为时,可以使用该选项。 但是,在OSX上,从默认终端(Terminal.app)中启动的默认外壳程序(即bash)实际上是源代码~/.bash_profile或~.profile其他内容。换句话说,它的作用类似于登录外壳程序。 主要问题:为什么默认的交互式shell是OSX上的登录shell?为什么OSX选择这样做?这意味着~/.bashrc在OSX上所有基于shell的东西的说明/教程中提到的更改内容都将失败,反之亦然~/.profile。尽管如此,尽管可以对苹果提出许多指控,但雇用无能或愚蠢的开发人员并不是其中之一。大概他们对此有充分的理由,那为什么呢? 子问题:Terminal.app是否实际上运行交互式登录外壳,或者它们是否改变了bash的行为?这是特定于Terminal.app还是与终端模拟器无关?