67

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

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

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

您能否帮助我理解,它是如何工作的?此外,何时使用 .bashrc/.profile/.bash_profile 文件。

谢谢!

4

8 回答 8

90

根据 OS X 附带的手册页:

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

只有在既不可读也不可读的情况下,它才应该~/.profile作为最后的手段来阅读。~/.bash_profile~/.bash_login

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

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

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

于 2013-09-12T19:49:33.120 回答
53

您的终端外壳也可能默认为 sh 而不是 bash。您可以先验证这一点:

$ echo $SHELL
/bin/tcsh

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

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

chsh -s bin/bash

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

于 2014-08-22T17:19:34.557 回答
53

苹果称,

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
于 2020-07-30T18:54:46.147 回答
10

对于发现此内容的任何其他人,而不是 bash_profile,对于新版本的 mac,您可以使用.zshrc. 即,做

open .zshrc

并在那里添加你需要的东西。

于 2021-01-26T15:40:07.117 回答
6

您可以使用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
于 2020-05-12T00:51:40.730 回答
3

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

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

于 2014-04-23T02:29:50.500 回答
1

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

if [ -f ~/.bash_profile ]; then
    source ~/.bash_profile
fi
于 2021-12-07T09:58:54.300 回答
-4

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

于 2019-01-12T12:47:27.330 回答