linux - 使用 gsutil 在 gcloud shell 上链接 bash 脚本

标签 linux bash shell gcloud gsutil

我构建了一系列 bash 脚本来为数据管道运行 BigQuery 作业。这些脚本保存在谷歌云存储桶中。我使用这个将它们通过管道传递给 sh:

gsutil cat gs://[bucket]/[filename] | sh

如果我从命令行运行这个基本上没有问题,但是一旦我尝试从 bash 脚本中运行这个命令,我总是收到找不到文件的错误?

这似乎不是 PATH 问题(我可能弄错了),因为从脚本中调用 $PATH 会显示 gsutil 所在的位置。

这是权限问题吗?

我在浏览器的谷歌云控制台 shell 中运行它。感谢您的帮助。

最佳答案

首先,尝试打印出 gsutil cat 命令的输出(stdout 和 stderr),而不是将其通过管道传输到 sh。如果您收到来自该命令的错误,这将有助于阐明 sh 提示的原因。 (以后,请尝试复制/粘贴您在发布问题时收到的确切错误消息。)

比较两次调用的 gsutil version -l 的输出也很有帮助。如果这是一个基于身份验证的问题,您可能会看到 config path(s) 行的不同值。如果是这种情况,则可能是:

  • 您正在以不同于通常运行 gsutil 的用户身份运行脚本。 gcloud 在 $HOME/.config/gcloud/... 下查找要传递给 gsutil 的凭证...例如如果您以 Bob 身份运行 gcloud auth login,但您以 root 身份运行脚本,gcloud 将尝试寻找 root 的凭据,而不是 Bob 的。
  • 在您的脚本中,您直接从 .../google-cloud-sdk/platform/gsutil/ 调用 gsutil,而不是它的包装器 .../google-cloud -sdk/bin/gsutil 负责传递 gcloud 凭据。

关于linux - 使用 gsutil 在 gcloud shell 上链接 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46497286/

相关文章:

linux - "source script.sh"和 "./script.sh"有什么区别?

bash - 在后台使用 HERE_DOC 方法运行脚本

linux - 环境变量不更新

linux - 查找在 linux 中运行的 MATLAB 脚本

bash - 如果错误的 Solaris 源以 255 退出,为什么 "false; echo $?"返回 1?

linux - ZOC 终端 :text has been cut halfway down the page

bash - 更改文件中两个带有字符 X 的字符串之间的字符串

database - Moodle 2.0 在哪里存储文件?在数据库中还是在文件系统中?

ruby-on-rails - Windows 8.1 上的 Ruby、Rails 开发环境

c - 什么是过程图?