【问题标题】:cant' store PATH after restart bash重新启动bash后无法存储PATH
【发布时间】:2020-09-02 09:52:16
【问题描述】:

我在 Windows 10 上使用 MINGW64。 我想使用 Heroku 命令。

如果我输入了heroku --version,它会显示bash: heroku: command not found。 所以我做了PATH="$PATH:/c/Program Files/Heroku/bin",heroku 命令开始工作。

现在,如果我关闭并重新启动 bash,heroku --version 仍然不起作用。

如何设置“永远”路径?谢谢

【问题讨论】:

标签: bash path mingw


【解决方案1】:

AFIK,Windows 可以通过控制面板在全局范围内永久设置环境变量,但这意味着它们将适用于所有应用程序,而不仅仅是那些您将用于 bash 的终端程序。

要仅对 bash 进行设置,您需要了解 bash 启动时会发生什么(参见 bash 手册页中的“INVOCATION”段落):

如果您的 bash 作为交互式登录 shell 执行,它默认处理您主目录中的文件 .bash_profile 文件。

如果它是交互式的,但不是登录 shell,它会处理 .bashrc 中的文件。

如果您只将 bash 作为 shell 运行,并且最顶层的 shell 作为登录 shell 启动,那么您在 .bash_profile 中进行 PATH 设置就完成了。由于 PATH 已导出,因此对所有子进程可见。

如果您遇到这种情况,即您启动了一个非登录 bash,并且父进程之间没有 bash login-shell,那么安全的方法是将这些定义放在您的主目录中的一个单独文件中,并且从 .bash_profile 和 .bashrc 中获取它。通过这种方式,您可以确保每个 bash 都能看到这些定义。

当然你不想让你的 PATH 被每个后续的子 shell 一次又一次地扩展,所以你需要保护你的 PATH 设置被多次应用,例如

if [[ ${path_extended:-no} == no ]]
then
  export PATH=....
  export path_extended=yes
fi

【讨论】:

  • "但这意味着它们将适用于所有应用程序,而不仅仅是您将用于 bash 的那些终端程序。"我不在乎所有应用程序是否都看到 heroku。我在控制面板上试过了,但还是 MINGW 没有看到它。或者至少:我添加一次,我第一次看到。当我重新启动 bash 时,我再也看不到它了。我需要在控制面板上再次删除/添加。
  • @markzzz :重新启动 bash 是什么意思?如果您创建一个新的终端实例,则应再次正确设置该变量 - 独立于 bash(您可以使用简单的 CMD 控制台对其进行验证)。如果不是这种情况,即如果您的 PATH 设置从您在控制面板中看到的内容中消失,这是与 Windows 相关的问题,而不是与 mingw 相关的问题。
  • 在 cmd 上我看到了那条路径。它在不能使用它的mingw bash上。我的意思是:heroku --version 在 CMD 中工作,而不是在 MINGW64 中
  • 您必须按照我在回答中建议的方式设置路径;但令我困惑的是:我从未使用过 mingw64,但this page 表明它根本不包含 bash 的分发,但包含一个名为 msys 的类似 bourne 的 shell,所以我不清楚你用什么 bash正在使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2021-01-19
  • 2016-12-06
  • 1970-01-01
  • 2014-08-22
  • 2014-06-21
相关资源
最近更新 更多