Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不更改$PATH的情况下重新加载.bash_配置文件?_Bash_Unix_Path - Fatal编程技术网

如何在不更改$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:没有这样的文件或目录