运行Google Cloud SDK时出现"sudo:gcloud:command not found"

Ang*_*per 3 ubuntu sudo google-cloud-platform google-cloud-sdk gcp

运行Ubuntu.

通过以下方式安装Google Cloud SDK:

$ sudo curl https://sdk.cloud.google.com | sudo bash 
$ exec -l $SHELL 
Run Code Online (Sandbox Code Playgroud)

运行"gcloud"工作正常.

运行"sudo gcloud"会导致以下错误:

sudo: gcloud: command not found
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我通过apt-get安装Google Cloud SDK时,"sudo gcloud"工作正常.不幸的是,我无法使用apt-get的Google Cloud SDK,因为kubectl没有附带它,也无法使用apt-get版本安装.

为什么"gcloud"会工作而不是"sudo gcloud"?

编辑5/21/2017:如果我使用sudo命令手动设置路径,则以下工作正常.我不是每次都这样做.

sudo env "PATH=$PATH" gcloud
Run Code Online (Sandbox Code Playgroud)

Ger*_*rik 9

首先,这是一篇gcloud文章,我在这里找到了答案,但我也将尝试在此总结,因为答案并非完全直截了当.

如果使用curl安装google-cloud-sdk,默认情况下安装目录将是用户的主目录.在完成之前,它还会询问"修改配置文件以更新$ PATH并启用shell命令完成?" 这实际上将更新登录的用户配置文件而不是sudoers文件或root用户配置文件.

如果您手动安装gcloud(例如通过tar/gz文件)作为您的个人用户而不是root用户,则该过程仅将gcloud添加到您的用户bashrc以及随后的PATH变量.这意味着它永远不会添加到根PATH变量中,并且不可用于sudo命令.

当您运行诸如以下内容时:sudo env "PATH=$PATH" gcloud您实际上正在抓取路径(包括gcloud的完整路径)并暂时将其分配给根路径.然后,这允许gcloud使用sudo,因为它存在于根PATH变量中.

解决这个问题的几种方法包括:

只需选择其中一个解决方案!(没有必要做所有这些.)

1)尝试通过aptitude重新安装gcloud(推荐,但不适用于您的情况):

sudo apt-get install google-cloud-sdk
Run Code Online (Sandbox Code Playgroud)

这应该在过程中将gcloud添加到你的sudoers路径中.如果命令不起作用,请在此处查看完整过程.

2)手动将gcloud路径添加到sudoers secure_path变量:

sudo vi /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

验证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符号链接到路径中的一个现有目录中,但我已经足够了解哪个是最好的.我会根据我的反馈更新我的答案.