【问题标题】:How to reload .bash_profile without changing $PATH?如何在不更改 $PATH 的情况下重新加载 .bash_profile?
【发布时间】:2015-03-24 07:19:50
【问题描述】:

我试图弄清楚如何在不退出我的 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 每次重新加载都更新?

【问题讨论】:

    标签: bash unix path


    【解决方案1】:

    好的,技巧一:你使用 .bash_profile 重新加载脚本

    $ source .bash_profile
    

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

    技巧二:那个作业

    PATH=/my/new/path:$PATH
    

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

    PATH=/my/new/path:my/old/path/:/my/even/older/path
    

    您不喜欢这种行为,您只需先重置 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
    

    exports 并不重要,因为 PATH 已经导出,只是我很挑剔。

    您还可以查看这个答案,了解我设置 shell 的其他一些方法:About .bash_profile, .bashrc, and where should alias be written in?

    你应该看看Bash Guide for Beginners,那里有很多有用的东西。

    【讨论】:

    • 嗨,查理,在将 PATH= 添加到我的 .bash_profile: env: bash: No such file or directory 后,我现在收到此错误,并且我的常用命令都不起作用。你知道我做错了什么吗?
    • 是的,您需要通过设置路径的组件来遵循它。该消息告诉您,您的道路上一无所有。
    • 感谢您的回答查理。我相信我需要在.rbenv 中找到首先添加到我的$PATH 的文件并在那里添加PATH=,因为即使我的$PATH 随后被写入,我也收到了上面的错误,即使我在我的.bash_profile 中有以下内容:PATH=、export PATH="/usr/local/bin:$PATH"、export PATH="/usr/local/heroku/bin:$PATH",仍然是:env: bash: No such file or directory
    【解决方案2】:

    或者,如果值不存在,您可以在插入或附加到 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
    

    【讨论】:

      【解决方案3】:

      我能想到的最简单的方法是更改​​您的别名,以便它存储现有路径并在获取文件后重置它:

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

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 1970-01-01
        • 2014-01-10
        • 2020-12-29
        • 1970-01-01
        • 2020-10-04
        • 2011-11-27
        相关资源
        最近更新 更多