根据我读过的各种建议,我已经将我的文件.profile
和文件分开了。.bashrc
我有一个别名bin
,用于在更改后刷新环境.profile
并.bashrc
避免退出并重新打开 shell。但目前存在两个问题:
- 我的
$PATH
值会随着每次刷新而增长,因为我在前面添加了默认值$PATH
。 - 我只想要
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。