如何在不更改$ PATH的情况下重新加载.bash_profile?

gar*_*oat 2 unix bash path

我试图找出如何加载我的更改,.bash_profile而不必注销我的Bash会话或退出终端,也不会影响我的$PATH.

在新的会话中,这是我的$PATH:

/Users/MyName/.rbenv/shims:/usr/local/heroku/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/local/go/bin
Run Code Online (Sandbox Code Playgroud)

这是我设置重新加载我的别名.bash_profile:

alias reload='source ~/.bash_profile'
Run Code Online (Sandbox Code Playgroud)

当我运行reload命令时,我的所有更改.bash_profile都被加载,但$PATH每次运行命令时都会延长.

例如:

>> reload

>> echo $PATH

/Users/MyName/.rbenv/shims:/usr/local/heroku/bin:/usr/local/bin:/Users/MyName/.rbenv/shims:/usr/local/heroku/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/local/go/bin
Run Code Online (Sandbox Code Playgroud)

你可以看到我$PATH现在更长了,我认为这是因为以下是我的.bash_profile:

export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/heroku/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

如何防止$PATH每次重新加载时更新?

Cha*_*tin 6

好的,第一招:你重新加载像.bash_profile这样的脚本

$ source .bash_profile
Run Code Online (Sandbox Code Playgroud)

内置源读取shell脚本,就好像它来自标准输入,而不是分支子shell.

诀窍二:那个任务

PATH=/my/new/path:$PATH
Run Code Online (Sandbox Code Playgroud)

只是将已经存在于PATH中的内容附加到新字符串中.所以,这就像做

PATH=/my/new/path:my/old/path/:/my/even/older/path
Run Code Online (Sandbox Code Playgroud)

你不喜欢这种行为,你只需要先重置PATH.我做的是这样的:

PATH=
PATH=/bin:$PATH
PATH=/usr/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

等等.现在路径将完全符合您的期望.

更新

这正是我的文件的样子:

export PATH=
export PATH=/bin
export PATH=${PATH}:/sbin
export PATH=${PATH}:/usr/local/bin
export PATH=${PATH}:/usr/sbin
export PATH=${PATH}:/usr/bin
export PATH=${PATH}:/usr/local/opt/go/libexec/bin
Run Code Online (Sandbox Code Playgroud)

exports不是真的很重要,因为PATH已经是出口的,他们只是我被挑剔.

你还可以看一下我的设置shell的其余部分的答案:关于.bash_profile,.bashrc,以及应该在哪里编写别名?

你应该看看Bash初学者指南,那里有很多有用的东西.