首先,这是一篇 gcloud 文章,我在其中找到了答案,但我也将在此处尝试对其进行总结,因为答案并不完全直截了当。
如果您使用 curl 安装 google-cloud-sdk,默认情况下安装目录将是用户的主目录。在完成之前,它还会询问“修改配置文件以更新您的 $PATH 并启用 shell 命令完成?” 这实际上将更新登录的用户配置文件,而不是 sudoers 文件或 root 用户配置文件。
如果您以个人用户而不是 root 身份手动安装 gcloud(例如通过 tar/gz 文件),则该过程只会将 gcloud 添加到您的用户 bashrc 和随后的 PATH 变量中。这意味着它永远不会添加到您的根 PATH 变量中,并且不可用于 sudo 命令。
当您运行以下内容时:sudo env "PATH=$PATH" gcloud
您实际上是在抓取路径(包括 gcloud 的完整路径)并将其临时分配给根路径。然后,这允许 gcloud 与 sudo 一起工作,因为它存在于根 PATH 变量中。
解决此问题的几种方法包括:
只需选择其中一种解决方案!(没有必要全部都做。)
1)尝试通过 aptitude 重新安装 gcloud(推荐,但不适用于您的情况):
sudo apt-get install google-cloud-sdk
这应该在此过程中将 gcloud 添加到您的 sudoers 路径中。如果命令不起作用,请在此处查看完整过程。
2) 手动将 gcloud 路径添加到 sudoers secure_path 变量:
sudo vi /etc/sudoers
验证 google-cloud-sdk 的安装目录,并将您的路径附加到 secure_path 变量的末尾,如下所示:
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:{YOUR_PATH_TO_GCLOUD}"
在您的情况下,由于您使用 sudo curl 安装,这将是:
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/<user-name>/google-cloud-sdk/bin"
3) 将 gcloud 的路径添加到您的 /etc/environment 文件中:
在这里,您正在编辑文件,而不是您的 sudoers/etc/environment
文件。(老实说,我不会推荐这个,因为它看起来有点矫枉过正)。
4)符号链接到现有路径目录:
您可能还希望将 gcloud 符号链接到路径中的现有目录之一,但我已经足够了解哪个是最好的。我会用我在这里得到的任何反馈来更新我的答案。