Macos 如何使OSX读取.bash_配置文件而不是.profile文件
我读了很多关于不要将自定义命令放入“.profile”文件的建议。而是为自己创建一个.bash_配置文件,并添加别名等 但是,当我打开新终端时,如果只有.bash_配置文件,OSX不会导出/获取其中提到的命令。我必须手动获取.bash_配置文件的源代码 如果我创建.profile文件,在打开一个新终端时,.profile中的所有命令都会被执行,并且随时可用 你能帮我理解一下它是如何工作的吗?另外,何时使用.bashrc/.profile/.bash\u概要文件Macos 如何使OSX读取.bash_配置文件而不是.profile文件,macos,bash,Macos,Bash,我读了很多关于不要将自定义命令放入“.profile”文件的建议。而是为自己创建一个.bash_配置文件,并添加别名等 但是,当我打开新终端时,如果只有.bash_配置文件,OSX不会导出/获取其中提到的命令。我必须手动获取.bash_配置文件的源代码 如果我创建.profile文件,在打开一个新终端时,.profile中的所有命令都会被执行,并且随时可用 你能帮我理解一下它是如何工作的吗?另外,何时使用.bashrc/.profile/.bash\u概要文件 谢谢 根据OS X附带的手册页面:
谢谢 根据OS X附带的手册页面: 。。。它按该顺序查找
~/.bash\u profile
、~/.bash\u login
和~/.profile
,并从第一个存在且可读的文件读取和执行命令。当外壳开始禁止此行为时,可以使用--noprofile选项
如果~/.bash\u profile
和~/.bash\u login
都不可读,则只能作为最后手段读取~/.profile
在我所有的OS X系统上,我的~/.bash\u配置文件设置为:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
强烈建议您在OS X上执行此操作,以便让bash按照预期读取~/.bashrc
文件。应该提到的是,bash将首先查找/etc/profile
文件,如bash手册页中所述
当bash作为交互式登录shell或非inter调用时-
带有--login选项的活动shell,它首先读取并执行com-
从文件/etc/profile中读取命令(如果该文件存在)。读取后
该文件将查找~/.bash\u配置文件、~/.bash\u登录名和~/.profile,
并从第一个
存在并且可读。当
shell已开始禁止此行为
您的终端shell也可能默认为sh而不是bash。您可以首先验证这一点:
$ echo $SHELL
/bin/tcsh
要将其更改为bash,您可以进入终端->首选项->启动选项卡,并将“Shell打开方式:”从“默认登录Shell”更改为命令和值“/bin/bash”
或者,您可以通过在命令提示符下执行以下命令来更改默认shell:
chsh -s bin/bash
执行其中一项操作后,打开一个新的shell窗口,您的.bash_配置文件应该会被获取。我只需将bash
(换行)添加到~/.bash_配置文件中即可解决此问题。您可以使用zsh
来解决此问题
zshell(也称为zsh
)是一个构建在上面的Unix shell
具有附加功能的bash
(macOS的默认外壳)。它是
建议在bash上使用zsh
安装
使用自制软件安装zsh:$brew安装zsh
安装Oh My Zsh:$sh-c“$(curl-fsSLhttps://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)“
移动到.bash_profile
设置.zshrc
文件
要应用所做的更改,您需要启动新的shell
实例或运行:source~/.zshrc
根据,
zsh(zshell)是所有新创建的用户帐户的默认shell,从macOS Catalina开始
因此,您应该使用以下命令验证默认shell:
$ echo $SHELL
如果结果为/bin/bash,则默认shell为bash,如果结果为/bin/zsh,则默认shell为zsh
使用$cd~/
返回主页,创建配置文件(如果不存在)并使用以下命令进行编辑:
对于bash:
$ touch .bash_profile
$ open .bash_profile
对于ZSH:
$ touch .zprofile
$ open .zprofile
对于任何其他找到此配置文件的人,而不是bash_配置文件,对于新版本的mac,您可以使用.zshrc
。也就是说,做什么
open .zshrc
并在那里添加所需内容。相关:您确定您使用的是bash,而不是其他shell吗?试试echo$SHELL
我在~/.profile
中的命令别名在终端中没有生效时遇到了同样的问题,通过使用将命令移动到~/.bashrc
中的方法解决了这个问题(并删除~/.profile
并制作小的~/.bash\u配置文件
)。但是,现在当我执行echo$PATH
时,所有路径条目都会在输出中出现两次。所以还是有问题!奇怪的had.bash\u profile
和terminal.app在此处忽略它。将文件(保留所有相同的权限)移动到.profile
,现在它很高兴。如果您使用的是zsh
而不是bash
,请提醒。终端将生成.zshrc
而不是.bash\u profile
。从今天起,OSX Cataline中的默认终端外壳是zsh
,因此@Albertsuel的评论应该变成答案。@Albertsuel谢谢!刚买了一台新的mac电脑,这就解决了OSX上默认的bash
没有源代码的问题。bashrc
与/etc/profile
中的任何内容无关。相反,它与以下事实有关:Terminal.app
将每个bash shell创建为一个登录会话,这样只会从~/.bash\u profile
或~/.bash\u login
或~/.profile
(以最先找到的为准)中获取源代码。如果您希望~/.bashrc
也被源代码化,请明确地从~/.bash_profile
中获取,如@Andon M.Coleman的回答所示。(如果您明确地将bash会话作为一个交互式非登录会话启动,~/.bashrc
将自动获取源代码。)您完全正确,我的解释发布得太匆忙了。感谢您的更正;我编辑了我的答案,并对你的评论投了赞成票,因为它正确地解释了我试图表达的意思