刷新.profile和.bashrc

刷新.profile和.bashrc

根据我读过的各种建议,我已经将我的文件.profile和文件分开了。.bashrc我有一个别名bin,用于在更改后刷新环境.profile.bashrc避免退出并重新打开 shell。但目前存在两个问题:

  1. 我的$PATH值会随着每次刷新而增长,因为我在前面添加了默认值$PATH
  2. 我只想要fortune当我启动一个新的 shell 时,而不是用 刷新它时bin

什么是最正确、非黑客的方式来刷新我的环境,而不产生不需要的副作用? (将系统路径复制粘贴到我.profile不是一个选项!)

.profile

# LOTS OF EXPORTS
export ***
export ***
export PATH=.:$HOME/bin:***:$PATH

shopt -s extglob
[ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"
fortune

.bashrc

# LOTS OF ALIASES
alias ***
alias ***
alias bin='source $HOME/.profile; set +h'

# LOTS OF FUNCTIONS
foo() {}
bar() {}

答案1

刷新环境的最简单、最简单的方法是退出当前的 shell 会话并启动一个新的会话。


您还可以从当前 shell 启动一个新的登录 shell,但这可能会产生不必要的后果,例如PATH即使您已经修改了PATH环境变量,新 shell 也会继承该环境变量,并且不会重置为它们本来应有的状态。如果您在新终端中启动了新 shell)。

您还可以使用 启动一个新的 shell env -i bash -l,在调用新的登录 shellenv -i之前会清除环境。bash这也可能与在新终端中启动新 shell 不同,因为继承的环境不同。

答案2

考虑使用内联测试并有条件地导出路径.bashrc

[[ $PATH =~ "$HOME/bin" ]] && export PATH="${HOME}/bin:${PATH}"

至于该命令,您可以通过将其添加到仅由登录 shell 执行的命令fortune来使其在登录时运行。.bash_profile您可以强制终端模拟器在应用程序的首选项中启动登录 shell。

相关内容