如何在不更改$PATH的情况下重新加载.bash_配置文件?
我试图弄清楚如何将更改加载到我的如何在不更改$PATH的情况下重新加载.bash_配置文件?,bash,unix,path,Bash,Unix,Path,我试图弄清楚如何将更改加载到我的.bash\u配置文件,而不必注销我的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 这是我用来重新加载.bash
.bash\u配置文件
,而不必注销我的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
这是我用来重新加载.bash\u配置文件的别名:
alias reload='source ~/.bash_profile'
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/heroku/bin:$PATH"
运行reload
命令时,会加载对.bash\u配置文件的更改,但每次运行该命令时,$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
正如您所看到的,我的$PATH
现在变长了,我想这是因为我的配置文件中有以下内容:
alias reload='source ~/.bash_profile'
export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/heroku/bin:$PATH"
如何防止每次重新加载时更新我的$PATH
?好的,诀窍一:使用
$ source .bash_profile
源内置程序读取shell脚本,就好像它来自标准输入,而不是派生子shell
诀窍二:那项任务
PATH=/my/new/path:$PATH
只是将路径中已经存在的内容追加到新字符串。所以,这就像
PATH=/my/new/path:my/old/path/:/my/even/older/path
如果您不喜欢这种行为,只需先重置路径即可。我是这样做的:
PATH=
PATH=/bin:$PATH
PATH=/usr/bin:$PATH
等等。现在,路径将完全符合您的预期
更新
下面是我的文件的外观:
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
导出
并不重要,因为已经导出了路径
,它们只是我太挑剔了
您还可以查看这个答案,了解我如何设置shell的其他部分:
您应该看看,那里有很多有用的东西。我能想到的最简单的方法是,更改您的别名,使其存储现有路径,并在源文件后重置它:
alias reload='tmp=$PATH;source ~/.bash_profile;export PATH=$tmp'
或者,如果该值尚未存在,则可以在插入或附加到路径之前进行检查:
insert_to_path()
{
if [[ "$PATH" =~ (^|:)"${1}"(:|$) ]]
then
return 0
fi
export PATH=${1}:$PATH
}
insert_to_path /usr/local/bin
insert_to_path /usr/local/heroku/bin
你好,Charlie,在将PATH=
添加到我的配置文件后,我现在收到了这个错误。env:bash:没有这样的文件或目录
,并且我的常用命令都不起作用。你知道我做错了什么吗?是的,你需要通过设置路径的组件来遵循它。这条信息告诉你,你的道路上什么都没有。谢谢你的回答,查理。我认为我需要在.rbenv
中找到首先添加到我的$PATH
中的文件,并在那里添加路径=
,因为即使我的$PATH
随后被写入时,我也收到了上面的错误,尽管我在.bash\u配置文件中有以下内容:路径=
,export PATH=“/usr/local/bin:$PATH”
,export PATH=“/usr/local/heroku/bin:$PATH”
,仍然:env:bash:没有这样的文件或目录