我可以在 .bashrc 中两次导出 PATH 吗?

Posted

技术标签:

【中文标题】我可以在 .bashrc 中两次导出 PATH 吗?【英文标题】:Can I export PATH twice in .bashrc? 【发布时间】:2014-04-26 15:15:48 【问题描述】:

我正在运行 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 工具和/或我的语法有什么问题 EDIT:[如果有的话]?

【问题讨论】:

仅供参考,.bashrc 通常不是更新 PATH 的正确位置——当其他 shell 启动的 shell 在父级运行后调用它时,您将多次添加条目.环境更新通常属于.bash_profile,因此每次登录仅运行一次。 无论如何,“怎么了?”假设任何事情都是错误的。向我们展示您收到的 PATH,以便我们了解您认为有什么问题的原因。 【参考方案1】:

您可以根据需要多次导出它,它不会有任何区别(显然是在第一次导出之后)。

export 在此上下文中所做的所有事情(除了由于= 而更改变量本身)都是标记变量,以便将其导出到未来命令的环境中。

您可以根据需要标记它。两个命令的效果:

export PATH="/usr/local/heroku/bin:$PATH"
export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.0/eb/linux/python3/

会将PATH 标记为导出变量(可能已经如此,因为您通常希望继承您的路径)并将其设置为:

/usr/local/heroku/bin:$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.0/eb/linux/python3/

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

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

或者,您可以通过提供一个别名或函数来使订单不那么永久,该别名或函数仅在当前会话中将您的路径更改为 Heroku 首选的路径。


请记住,由bash 运行的文件是complex matter。 .bashrc 是为交互式非登录 shell 运行的,因此可能无法在所有情况下运行(我,一方面,通过在我的 .bash_profile 末尾调用 .bashrc 来解决这个问题,尽管有些人可能会畏缩)。

您最好在.bash_profile 中设置(并导出)路径。


而且,如果您正在做的事情有问题(您的 语法 看起来不错,但由于缺乏信息,我们可能无法识别其他问题),您应该执行以下步骤:

echo $PATH 在每个 export 命令之前和之后查看是否有什么东西塞住了它。 确保路径中的每个组件确实存在(即,您在其中拥有正确的目录)。

【讨论】:

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

以上是关于我可以在 .bashrc 中两次导出 PATH 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Google Apps 脚本中两次调用(POST 和 GET)之间的延迟

Ubuntu 将 /opt/lampp/lampp 导出到 PATH

Linux 导出路径错误。如何恢复 ~./bashrc 文件

在php中两次调用相同的函数时出错

如何计算 Git 中两次提交之间更改的行数?

开发过程中两次修改CoreData