【问题标题】:Error "command not found" after installing go-eval安装 go-eval 后出现“找不到命令”错误
【发布时间】:2016-03-18 11:46:23
【问题描述】:

我正在尝试以交互模式运行Go

我想使用go-eval,我按照他们的README 说明进行操作:

  • 我跑go get github.com/sbinet/go-eval/成功了
  • 我跑了go-eval,结果是-bash: go-eval: command not found

更多信息:

  • echo $PATH 返回:/usr/local/go/bin:...

  • echo $GOPATH 返回:$HOME/golang

  • 运行 whereis go-eval 不返回任何输出

  • 运行go install go-eval 返回:

    can't load package: package go-eval: cannot find package "go-eval" in any of: /usr/local/go/src/go-eval (from $GOROOT) $HOME/golang/src/go-eval (from $GOPATH)

【问题讨论】:

  • 你的 GOPATH 是什么? GOPATH/bin 在你的 PATH 中吗?
  • $HOME/go/bin 在你的 PATH 中吗?

标签: macos go


【解决方案1】:

您需要将GOPATH/bin 添加到PATH

PATH="$GOPATH/bin:$PATH"

更新 [Go 1.8 and above]GOPATH 将默认为 $HOME/go。如果未明确设置GOPATH,上述将不起作用

要同时设置,请将其添加到您的 .profile 文件中:

export GOPATH="$HOME/go"
PATH="$GOPATH/bin:$PATH"

【讨论】:

  • 有效。您字面上需要在命令中使用“$GOPATH”来获得工作设置。如果只是手动编写完整路径,即使有效且准确,也似乎行不通。最终,当您使用“echo $PATH”进行测试时,您所看到的只是路径。 $GOPATH 用作指向您的环境变量的指针,但是当您使用“echo $PATH”进行测试时,它不会以任何方式指示。
  • 如果您手动输入路径,它应该可以工作,$GOPATH 更好,因为您不必对路径进行硬编码(假设 GOPATH 已设置,从 Go 1.8 开始不再需要)。
  • 如果您使用的是 Iterm 终端,请更新 ~/.zshrc
【解决方案2】:

二进制go-eval$GOPATH/bin 中吗?您是否以$GOPATH/bin/ 作为工作目录运行命令?如果不是,那很可能是问题所在。

go get & go install$GOPATH/bin 中安装 go 二进制文件(如果有)

检查 $GOPATH/bin 以获得 go-eval 二进制文件。如果它在那里,请尝试从$GOPATH/bin./go-eval 运行它。如果这行得通,那你很好。

以后,如果您希望从 shell 的任何位置运行在 $GOPATH/bin 中找到的 go 二进制文件,请将以下内容添加到您的 .bashrc 或配置文件中:

export PATH=$PATH:$GOPATH/bin

然后重新启动终端或运行. ~/.bashrc. /etc/profile

运行 go install go-eval 时,我得到:

无法加载包:包 go-eval:在以下任何一个中都找不到包“go-eval”: /usr/local/go/src/go-eval(来自 $GOROOT) $HOME/golang/src/go-eval(来自 $GOPATH)

您收到上述错误是因为 go-eval 不在 $HOME/golang/src/go-eval 中。运行go get github.com/sbinet/go-eval/ 会将源下载到$GOPATH/src/github/sbinet/go-eval/。如果要运行go install go-eval,则必须在$GOPATH/src 中指定与其在目录层次结构中的位置相关的包名称。

例如 go install github/sbinet/go-eval

【讨论】:

    【解决方案3】:

    在使用export PATH="~/go/bin:$PATH" 时遇到了这个问题。

    似乎~ 引起了问题并且更改为完整路径有效。

    试试这样的东西,它不会使用波浪号:

    export PATH="$HOME/go/bin:$PATH"

    【讨论】:

    • 波浪号在引用时不会扩展,但如果没有双引号,它会起作用。
    • 是的,这很奇怪,因为我的印象是波浪号在路径中起作用。估计不是。具有讽刺意味的是,我也碰巧觉得波浪号确实用双引号扩展了一段时间。也许这只是我当时使用的外壳/配置。
    【解决方案4】:

    除了给出的答案之外,我还想添加这个。

    作为一个有用的提示,你可以随时使用 which 命令测试你的命令。

    如:哪去

    如果找不到该命令,则说明您有 PATH 问题,需要先解决。

    然后您可以专注于使用 find 命令查找命令。

    如:find / -name "go" -print 2>/dev/null

    第一个斜杠是开始搜索的目录,-name 的参数是您要查找的命令,-print 可以得到很好的结果。 2>/dev/null 发送neverland(null)无法访问的目录结果,这样您就不需要看到一堆错误。

    使用此过程可以帮助您快速找到有问题的命令,然后您可以将其添加到您的 PATH 环境变量中,并且可以按照其他答案中的说明访问它。

    【讨论】:

      【解决方案5】:

      以上所有答案都是自我解释。除此之外,我想补充一点,默认情况下,您只能从终端访问那些命令,而没有将其 bin 文件夹添加到环境变量中的二进制文件的路径,无论是 linux、mac 还是 windows。

      否则,您必须指定该软件的 bin 文件夹的路径,后跟二进制名称。例如在你的情况下<path_to_bin_folder>/go-eval

      这是您无法直接从命令行执行该命令的最常见原因。请记住这一点并在在线搜索答案之前尝试此操作,因为这很可能会解决您的问题。您只需要知道安装路径即可。

      因此,将以下内容写入终端的rcprofile 文件并保存,例如zsh 为~/.zshrc,bash 为~/.bash_profile~/.bash_rc

      export GOPATH="$HOME/go"
      export PATH=$PATH:$GOPATH/bin
      

      现在虽然文件已保存,但更改不会立即反映。您必须如上所述获取配置文件。对于这种类型source ~/.zshrc。您现在应该可以直接从命令行运行命令了。即使问题仍然存在,请尝试退出终端会话并注销然后登录。

      如果您想为其他包添加 bin 文件夹的路径,您可以使用 : 将其附加到 $PATH 环境变量中。因此,例如,如果您还想添加 java 二进制文件的路径,那么只需执行

      export PATH=$PATH:$JAVA_HOME/bin
      

      另外,在其单独的环境变量中定义包根文件夹的路径也是一个好习惯(例如$GOPATH="$HOME/go")。如果将来安装路径发生变化,那么您只需要更新与该二进制文件相关的环境变量(例如只是更新,$GOPATH="newpath")并且您的命令将像以前一样工作,因为 $GOPATH 中的更改将反映在 $PATH 中。

      【讨论】: