为啥我不能使用 gcloud 的批处理文件连续运行 2 个命令

Posted

技术标签:

【中文标题】为啥我不能使用 gcloud 的批处理文件连续运行 2 个命令【英文标题】:Why can't I run 2 commands consecutively using batch file for gcloud为什么我不能使用 gcloud 的批处理文件连续运行 2 个命令 【发布时间】:2021-12-07 08:43:12 【问题描述】:

所以我有这个 .bat 文件:

@echo off
cd C:\Users\user\Downloads
gcloud auth activate-service-account --key-file=keyFileName.json
gcloud auth print-access-token
pause

在第一次 gcloud 命令,它会突然使命令提示符中途崩溃,但是当我将每一行手动复制并粘贴到与我尝试的位置相同的位置的命令提示符中时 cd 要在 .bat 文件,它可以工作......知道为什么吗?顺便说一句,我在 Windows 10 上。

在 Google 上搜索,我发现了两个相关问题,分别在 Github 和 ***。

Github 的解决方案是使用 python,这不是我需要的,而 *** 的解决方案没有任何人帮助他/她...

谢谢

【问题讨论】:

这是一个纯粹的猜测,但看到你有一个测试环境......试试 gcloud auth activate-service-account --key-file=keyFileName.json --quiet "...但是当我手动复制和粘贴每一行时,它可以工作..." 复制到命令提示符窗口的位置?在什么路径? @Kolban 试过了,但是在尝试第一个命令时它仍然中途退出 @aschipfl 是的,进入命令提示符,在我试图 cd.bat 文件的同一路径中,我已编辑我的问题以反映这一点。很抱歉造成混乱。 这是另一个猜测...在您的 bat 文件中尝试以下操作: cmd /c gcloud auth activate-service-account --key-file=keyFileName.json @Kolban 是的,谢谢,它终于奏效了……我只需要在 gcloud 命令和 cmd /c 的开头添加您可能想添加它作为答案所以我可以将此标记为已解决,谢谢 【参考方案1】:

在运行一些 gcloud 命令时,他们期望自己可能正在与用户交互。此外,它们可能与当前的命令行处理器(Windows 上的 CMD)产生不利的交互。这可能导致命令行处理器过早结束。一种解决方案是在它们自己的本地/嵌套命令行处理器实例中运行脚本化 gcloud 命令。

如果今天,您的脚本包含:

gcloud ... some command parameters ...

将其替换为:

cmd /c gcloud ... some command parameters ...

这将导致 gcloud 命令在其自己的嵌套环境中运行,不会干扰***(脚本)环境。

【讨论】:

【参考方案2】:

您也可以在每个命令前添加CALL,例如:

CALL gcloud app deploy
CALL gcloud app describe

【讨论】:

以上是关于为啥我不能使用 gcloud 的批处理文件连续运行 2 个命令的主要内容,如果未能解决你的问题,请参考以下文章

为啥 atprogram 不能在批处理文件中工作?

为啥我在使用 zip 或直接使用编辑器在 gcloud 中部署 nodejs 函数时遇到错误?

为啥我们不能在一个批处理文件中执行 BigQuery 的多个语句?

为啥我在 gcloud 中设置 http 负载均衡器时无法选择我创建的托管实例组?

在 python 脚本中运行 gcloud auth 和 gsutil 命令

通过 GSUTIL 将文件从 Windows 10 文件夹上传到 Gcloud 存储桶时出现问题