我能否在.bashrc中两次导出PATH?

8

我正在运行Ubuntu 12.04,并尝试使用Heroku CLI和新下载的AWS Elastic Beanstalk CLI工具。

我已经在我的.bashrc文件中添加了以下代码:

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

我还想导出这个:
#for Elastic Beanstalk - madebyian
export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.0/eb/linux/python3/

我应该如何获取CLI工具,或者我的语法有什么问题? 编辑:[如果有的话]

1
FYI,.bashrc 通常不是更新 PATH 的正确位置 - 当其他 shell 启动它并在父进程已经运行后调用它时,会添加多个条目。环境更新通常应放在 .bash_profile 中,这样它们只会在每次登录时运行一次。 - Charles Duffy
无论如何,“出了什么问题?”都假定任何事情都出了问题。请展示你所获取的PATH,这样我们才能知道你为什么认为有问题。 - Charles Duffy
1个回答

18
你可以无限次地将其导出,这不会有任何区别(显然第一次导出后)。
在这种情况下,export 所做的所有事情(除了由于 = 而更改变量本身之外)都是将变量标记为将被导出到未来命令的环境中。
你可以将其标记多次。这两个命令的效果:
export PATH="/usr/local/heroku/bin:$PATH"
export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.0/eb/linux/python3/

将把PATH标记为导出变量(由于通常希望路径被继承,因此它可能已经是这样了),并将其设置为:

将会标记PATH为导出变量(因为通常情况下您希望您的路径被继承),并将其设置为:

(Note: The original Chinese text contains two slightly different versions of the same sentence. The above translations correspond to the second version, which has a typo corrected ("您" instead of "你").)
/usr/local/heroku/bin:$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.0/eb/linux/python3/

$PATH是在执行这些命令之前的路径。

唯一需要注意的是顺序。例如,如果/usr/local/heroku/bin包含一个名为ls的可执行程序,那么如果您尝试获取目录列表,这可能会让您的生活变得困难。出于这个原因,我倾向于将目录添加到路径的末尾

或者,您可以提供一个别名或函数,仅针对当前会话将您的路径更改为Heroku首选路径,以使顺序不那么永久。


请记住,由bash运行的文件是一个复杂的问题.bashrc用于交互式、非登录shell,因此可能不会在所有情况下运行(我自己通过在.bash_profile的末尾调用.bashrc来解决这个问题,但有些人可能会感到不适)。

.bash_profile中设置(并导出)路径可能更好。


而且,如果您正在做的事情有问题(您的语法似乎没问题,但由于缺乏信息,可能会有其他问题),您应执行以下步骤:

  • 在每个export命令之前和之后运行echo $PATH,查看是否有任何问题。
  • 确保路径中的每个组件实际上都存在(即您在其中拥有正确的目录)。

也许将其与https://dev59.com/PHRC5IYBdhLWcg3wFNDX做个引用会有用。 - Xavier S.
+1;>“导出到未来命令环境”更准确地说,是导出到当前(shell)进程的任何未来子进程的环境。这意味着预先存在的 shell 实例及其(可能的未来)子进程不会受到影响。因此,正如 @CharlesDuffy 指出的那样,~/.bash_profile 是放置 export 命令的最佳位置。 - mklement0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接