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

15 浏览
0 Comments

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

我想找出如何在不退出Bash会话或退出终端的情况下加载对我的.bash_profile的更改,并且不会影响到我的$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_profile的别名:

alias reload='source ~/.bash_profile'

当我运行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

如你所见,我的$PATH现在变长了,我认为这是因为以下内容在我的.bash_profile中:

export PATH="/usr/local/bin:$PATH"
export PATH="/usr/local/heroku/bin:$PATH"

如何在每次重新加载时保持我的$PATH不更新?

0
0 Comments

问题的原因是在.bash_profile文件中设置了新的PATH变量,但无法重新加载该文件以使更改生效。解决方法是使用source命令重新加载.bash_profile文件,或者在设置新的PATH变量之前先重置PATH变量。

以下是解决方法的整理:

1. 使用source命令重新加载.bash_profile文件:

$ source .bash_profile

2. 在设置新的PATH变量之前先重置PATH变量:

PATH=

PATH=/bin:$PATH

PATH=/usr/bin:$PATH

...

3. 检查.bash_profile文件中的设置是否正确:

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

4. 确保PATH变量中的组件已正确设置,避免出现"env: bash: No such file or directory"错误提示。

希望以上解决方法对你有帮助。如果需要更多关于.bash_profile文件和设置shell的信息,请参考Bash Guide for Beginners。

0
0 Comments

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

在重新加载.bash_profile之前,可以检查是否已经存在要插入或追加到$PATH的值:

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

问题的原因:

重新加载.bash_profile是为了使更改生效,但是在重新加载过程中,可能会更改$PATH的值,从而导致原本存在的路径被删除或重复出现。

解决方法:

为了避免更改$PATH的值,可以在重新加载.bash_profile之前,先检查要插入或追加到$PATH的值是否已经存在。如果已经存在,则不进行任何操作;如果不存在,则将新的路径插入到$PATH的开头,以确保新的路径优先使用。

上述代码中的insert_to_path函数实现了这一逻辑。首先,使用正则表达式检查$PATH中是否已经存在要插入的路径。如果存在,则函数直接返回0,表示路径已存在,不需要进行任何操作。如果不存在,则将新的路径插入到$PATH变量的开头,并导出新的$PATH值。

通过使用这个insert_to_path函数,在重新加载.bash_profile时,可以避免对$PATH进行不必要的更改,从而保持原有的路径设置不变。这样可以确保新的路径被正确地插入到$PATH中,并且不会导致路径的重复出现。

0
0 Comments

问题出现的原因:

在重新加载.bash_profile文件时,如果直接使用source命令,会导致$PATH变量被重置为文件中的值,而不是保留之前的值。

解决方法:

最简单的方法是修改alias,使其在加载文件之前先存储当前的$PATH,并在加载完成后重新设置$PATH为之前的值。具体操作如下:

alias reload='tmp=$PATH;source ~/.bash_profile;export PATH=$tmp'

0