在Bash on Ubuntu on Windows(Linux子系统)中设置$PATH时出现的问题

9
我正在使用“Windows上的Ubuntu Bash”(Linux子系统),想要将Terraform添加到我的$PATH中。由于无法通过apt-get安装Terraform,因此我执行了以下步骤:
  1. 进入我想要安装Terraform的目录:
  2. cd /usr/local

  3. 在上述路径中,使用wget下载Terraform:
  4. wget https://releases.hashicorp.com/terraform/0.9.8/terraform_0.9.8_linux_amd64.zip

  5. Terraform成功解压缩!当我在VIM中打开文件时一切都很好:
  6. unzip terraform_0.9.8_linux_amd64.zip

  7. 然后我输入这个命令来检查Terraform二进制文件是否可以从命令行访问:
  8. terraform -version

然而,返回以下消息:
terraform: command not found

这告诉我需要将 Terraform 下载位置添加到我的 $PATH 中。
5. 已经以 root 用户身份登录("sudo su"),我输入以下命令访问“.profile”: vim ~/.profile 该文件中已经包含以下内容,我不做更改:
 # ~/.profile: executed by Bourne-compatible login shells.

 if [ "$BASH" ]; then
   if [ -f ~/.bashrc ]; then
     . ~/.bashrc
   fi
 fi

 mesg n

紧接着这段文字下方,我添加了以下内容,并成功使用:wq!保存了文件:

 export PATH=/usr/local/bin:$PATH
 export PATH=$PATH:/usr/local/terraform

6. 我再次输入以下命令以检查terraform是否被检测到:

terraform -version

仍然返回相同的“terraform:command not found”消息。我甚至尝试关闭并启动新的命令行会话,甚至重新启动计算机。仍然没有改变。

有人有任何解决方法吗?请注意,我正在使用“Bash on Ubuntu on Windows”(Linux子系统)。任何意见都将不胜感激!


1
我稍后会使用WSL启动Win10进行确认,但请确保Ubuntu使用(源)~/.profile而不是~/.bash_profile。一些发行版使用其中之一,我不记得Ubuntu使用哪个了。例如,SuSE使用前者,而Archlinux使用后者。 - David C. Rankin
将zip包下载到系统位置是奇怪和不规则的。/usr/local可能是从zip文件提取的内容进行安装的好目标(库文件放在/usr/local/lib,可执行文件放在/usr/local/bin等),如果正确执行,您可能无需更新PATH或其他系统配置设置。传统上,tarball(而不是zip)将包含一个configure脚本,该脚本创建一个Makefile或类似的东西,允许您运行一个简单的脚本来安装(和卸载)软件包。 - tripleee
2个回答

17

你问题的直接答案在结尾。 但我认为如果你从这里继续阅读会更有意义。

在尝试添加到PATH之前, 我建议先测试一个程序。 对于你的情况,我会像这样做:

wget https://releases.hashicorp.com/terraform/0.9.8/terraform_0.9.8_linux_amd64.zip
unzip terraform_0.9.8_linux_amd64.zip
./terraform

注意最后一行./terraform。 zip文件只包含一个文件terraform, 现在应该在当前目录下, 所以我可以使用./terraform来运行它。 如果它是可执行的。 如果不可执行,则进行确认:

ls -l terraform

如果需要,使其可执行:

chmod +x terraform
现在让我们将其添加到 PATH 中。 但首先,让我们决定在哪里放置这个可执行文件。 /usr/local/bin 似乎是一个合理的位置。 因此,将 terraform 可执行文件移动到该目录中。
通常情况下,/usr/local/bin 已经在 PATH 中了, 所以您可能不需要更改任何内容。 现在您可以尝试检查一下,很有可能它已经可以工作了:
terraform -version
如果没有,则 /usr/local/bin 不在 PATH 上。 要添加它,请在~/.profile中添加此行:
export PATH=$PATH:/usr/local/bin
你的方法有两个根本性问题:
1. 将`/usr/local/terraform`添加到`PATH`中。这很可疑,因为`PATH`中的条目必须是目录,在你的帖子中没有任何表明你在`/usr/local/terraform`创建了一个目录。
- 你`cd`进入`/usr/local`,然后解压terraform的zip文件。链接的zip文件包含一个名为`terraform`的单个文件,因此你示例中的`/usr/local/terraform`应该是一个文件。 - 如果它是一个文件,则可以通过将其基本目录添加到`PATH`来使其可执行为`terraform`。但是将`/usr/local`添加到`PATH`并不是一个好主意。惯例是将二进制文件放在`/usr/local/bin`中,而不是直接放在`/usr/local`中。
2. 您没有说明如何重新加载`.profile`。编辑此文件后,您添加的新命令不会自动在当前shell中执行。它们将在打开新shell时执行。或者您可以在当前shell中手动执行添加的命令。

太完美了!非常感谢@janos!解释得非常清楚!我也很感激@David的努力!问题似乎是因为我没有将文件存储在usr/local/bin中。将/usr/local/terraform添加到PATH以及将其存储在该目录路径中的想法来自于我在网上遵循的教程,所以我盲目地跟随它,认为他知道我不知道的东西哈哈! - user791134
@user791134,你能准确地描述所有步骤,这很好,使得问题易于定位。很少有提问者这样做(他们也不太可能得到好的答案:对所有人来说都是一种损失)。所以你也做得很好! - janos
当你说“所以让我们将terraform可执行文件移动到那个目录...”(usr/local/bin)时,你是指直接运行mv terraform /user/local/bin吗?还是有其他方法可以实现这一点? - ericOnline

0

执行下面的命令

export PATH=$PATH:/usr/local/bin

我认为这个答案没有提供任何详细接受答案中已经涵盖的内容。 - Matt Raines

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