【问题标题】:How to make OS X to read .bash_profile not .profile file如何让 OS X 读取 .bash_profile 而不是 .profile 文件
【发布时间】:2013-09-17 08:36:08
【问题描述】:

我已经阅读了很多关于不要将您的自定义命令也称为“.profile”文件的建议。相反,为自己创建一个 .bash_profile 并添加您的别名等。

但是,当我打开新终端时,如果只有 .bash_profile,OS X 不会导出/采购其中提到的命令。我必须手动获取 .bash_profile。

如果我创建 .profile 文件,在打开一个新终端时,我在 .profile 中的所有命令都会执行并且随时可用。

您能帮我理解一下,它是如何工作的吗?另外,何时使用 .bashrc/.profile/.bash_profile 文件。

谢谢!

【问题讨论】:

标签: macos bash


【解决方案1】:

根据 OS X 附带的手册页:

...它按顺序查找 ~/.bash_profile~/.bash_login~/.profile,然后读取和从第一个存在且可读的命令中执行命令。 --noprofile 选项可在 shell 启动时使用以禁止此行为。

如果~/.bash_profile~/.bash_login 均不可读,则应仅将~/.profile 作为最后的手段。

在我所有的 OS X 系统上,我的 ~/.bash_profile 设置为:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

强烈建议您在 OS X 上执行此操作,以便让 bash 像您期望的那样读取您的 ~/.bashrc 文件。

【讨论】:

  • 我遇到了同样的问题,~/.profile 中的命令别名没有在终端中生效,并通过使用将命令移动到 ~/.bashrc 的方法解决了这个问题(并删除了 ~/.profile并制作小~/.bash_profile)。但是,现在当我执行 echo $PATH 时,我的所有路径条目都会在输出中出现两次。所以还是有问题!
  • 很奇怪。有.bash_profile 和 terminal.app 在这里忽略它。将文件(保留所有相同的权限)移动到.profile,现在它很高兴。
  • 提醒您是否使用zsh 而不是bash。终端将获取 .zshrc 而不是 .bash_profile
  • 截至今天,OSX Cataline 中的默认终端 shell 是 zsh,所以 @AlbertSamuel 的评论应该变成答案。
  • @AlbertSamuel 谢谢!刚买了一个新的mac,这解决了它
【解决方案2】:

您的终端 shell 也可能默认为 sh 而不是 bash。你可以先验证一下:

$ echo $SHELL
/bin/tcsh

要将其更改为 bash,您可以进入终端 -> 首选项 -> 启动选项卡,然后将“Shell 打开方式:”从“默认登录 shell”更改为命令和值“/bin/bash”。

或者,您可以通过在命令提示符处执行以下命令来更改默认 shell:

chsh -s bin/bash

完成其中一项操作后,打开一个新的 shell 窗口,您的 .bash_profile 应该是源文件。

【讨论】:

  • 我发现我想使用 sh 而不是 bash。我使用 zsh,我发现这条评论很有帮助:github.com/robbyrussell/oh-my-zsh/issues/… - 基本上将 source ~/.bash_profile 添加到 ~/.zshrc 配置的底部
  • 是的,工作!只需将source ~/.bash_profile 添加到~/.zshrc 的底部即可。
【解决方案3】:

根据Apple

zsh (Z shell) 是所有新创建的用户帐户的默认 shell,从 macOS Catalina 开始。

所以您应该使用以下命令验证您的默认 shell:

$ echo $SHELL

如果结果是 /bin/bash 你的默认 shell 是 BASH,如果结果是 /bin/zsh 默认是 ZSH。

使用$ cd ~/ 回家并创建配置文件(如果它不存在)并使用命令进行编辑:

对于 bash:

$ touch .bash_profile
$ open .bash_profile

对于 ZSH:

$ touch .zprofile
$ open .zprofile

【讨论】:

  • 你是英雄。我一直在试图弄清楚为什么 .bash_profile/.bashrc/.profile 半小时都不起作用。
  • 谢谢!! Z shell 让我陷入了循环,谷歌搜索发现了所有旧方法......
  • 谢谢你!我用了 4 年的 mac,你救了我。我被 bash_profile 卡住了
  • 对于 Apple M1 芯片,这个工作。不要再看了,谢谢道格。!
  • 感谢@Doug 的回答。
【解决方案4】:

对于其他找到此文件的人,而不是 bash_profile,对于新版本的 mac,您可以使用 .zshrc。即,做

open .zshrc

并在那里添加您需要的内容。

【讨论】:

    【解决方案5】:

    您可以使用zsh 解决问题。

    Z shell(也称为zsh)是一个构建在顶层之上的 Unix shell bash(macOS 的默认 shell)的附加功能。它是 建议使用zsh 而不是bash.

    安装

    1. 使用 Homebrew 安装 zsh:$ brew install zsh
    2. 安装 Oh My Zsh:$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
    3. 移动到.bash_profile设置.zshrc文件
    4. 要应用您所做的更改,您需要启动新的 shell 实例或运行:source ~/.zshrc

    【讨论】:

    • 仅供参考 bash 不再是 macOS 的默认 shell(从 Catalina 开始)
    【解决方案6】:

    应该提到 bash 将首先查找 /etc/profile 文件,如 Bash 手册页中所述。

    当 bash 作为交互式登录 shell 或非交互登录 shell 调用时 带有 --login 选项的活动 shell,它首先读取并执行 com- 文件 /etc/profile 中的命令,如果该文件存在。 阅读后 该文件会查找 ~/.bash_profile、~/.bash_login 和 ~/.profile, 按该顺序,并从第一个命令中读取并执行命令 存在并且可读。 --noprofile 选项可以在以下情况下使用 shell 开始禁止这种行为。

    【讨论】:

    • 默认情况下 OSX 上的 bash 不来源 ~/.bashrc/etc/profile 中的任何内容无关。相反,它与 Terminal.app 创建 every bash shell 作为 login 会话这一事实有关,因此只有 ~/.bash_profile~/.bash_login~/.profile (以找到的拳头为准)来源。如果您也希望获取~/.bashrc,请明确从~/.bash_profile 获取,如@Andon M. Coleman 的回答。 (如果您明确地将 bash 会话作为交互式非登录会话启动,~/.bashrc 将自动获取。)
    • 你说的很对,我的解释太仓促了。感谢您的更正;我编辑了我的答案并赞成你的评论,因为它正确地解释了我试图描述的内容。
    • 在 OSX El Capitan 上,我注意到 root 在 /bin/sh 下运行(我相信那是 Ash shell?)而不是 Bash shell。但是当我打开终端提示并检查 $SHELL 变量时,它显示为 /bin/bash。那么,对于 /bin/sh 的情况,我们编辑什么脚本?
    【解决方案7】:

    如果您使用的是 zsh,则可以通过将以下行添加到 .zprofile 来获取 .bash_profile

    if [ -f ~/.bash_profile ]; then
        source ~/.bash_profile
    fi
    

    【讨论】:

      【解决方案8】:

      我通过简单地将bash(在换行符中)添加到 ~/.bash_profile 文件中来解决。

      【讨论】:

        猜你喜欢
        • 2014-12-24
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 2018-04-24
        • 1970-01-01
        相关资源
        最近更新 更多