我如何永久设置我的 bashrc 更改?

我如何永久设置我的 bashrc 更改?

每次登录 SSH 时,我都必须手动获取 bashrc 文件以按我想要的方式设置路径变量。如何让 bash 自动执行此操作?它不应该是自动的吗?

答案1

有一个~/.profile(或~/.bash-profile) 文件,每次登录时都会运行。您应该在那里设置环境变量(使用命令export)。还有一个~/.bashrc文件,每次打开 shell 时都会运行。没有被所有子 shell 继承的命令(如别名)可以在这里设置(但为了良好实践,别名应该在 中设置~/.aliases,它由 自动提供~/.bashrc)。

如果不起作用,则可能是您使用了错误的文件名(开头缺少“。”),或者您没有使用 bash 作为 shell。在后一种情况下,请尝试passwd -s /bin/bash(或chsh -s /bin/bash,取决于操作系统),或者按以下方式调用 SSH: 

ssh username@host bash`

答案2

您还应该了解 $BASH_ENV 。

bash 启动时读取哪些文件取决于会话是否为交互式。有时可能会出现不清楚会话是否为交互式的问题。因此,除了 ~/.bashrc 之外,您可能还想导出并设置变量 BASH_ENV 以指向包含 PATH 和其他所需设置的文件。只要其中没有交互式命令(为安全起见,请使用单独的文件,例如 ~/.bash_env),就可以将 BASH_ENV 设置为指向您的 .bashrc 文件(有时是 .bash_rc)。摘自 bash 手册页:


当启动非登录 shell 的交互式 shell 时,如果 ~/.bashrc 文件存在,bash 将从该文件中读取并执行命令。可以使用 --norc 选项禁止此操作。--rcfile 文件选项将强制 bash 从文件而不是 ~/.bashrc 中读取并执行命令。

例如,当以非交互方式启动 bash 以运行 shell 脚本时,它会在环境中查找变量 BASH_ENV,如果该变量存在,则展开其值,并使用展开的值作为要读取和执行的文件的名称。Bash 的行为就像执行了以下命令一样:

  if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

但PATH变量的值不用于搜索文件名。


答案3

我知道这已经过时了,但我认为在新的登录 shell 上,bash 会寻找要运行的单个文件。它会先查找 .bash_profile,然后是 .profile,然后是 .bashrc。如果找到 .bash_profile 或 .profile,它就不会再查找 .bashrc。

解决方案,请将以下内容放入您的 .profile 中:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

答案4

已经有几个(可能是正确的)答案,但我遇到了完全相同的问题,而这对我有用:

添加~/.bash_profile以下几行:

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

这里这里了解更多信息。

(请注意,在我的 $HOME 目录中我已经有以下文件 .bash_aliases .bash_history .bash_logout .bash_profile .bashrc:)

相关内容