我可以在 .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