我想运行一个 bash 脚本,该脚本调用一个命令,然后使用第一个命令的部分输出在脚本中设置一个变量。就我而言,我想将变量设置URL
为https://loady-7jmiymbtlg-uc.a.run.app
。
my-script.sh
:
gcloud run deploy loady
# echo $URL <--- how to set this with the output from the above command
当我运行脚本时(示例输出):
karl@Karls-MacBook-Pro ~ $ ./my-script.sh
Deploying container to Cloud Run service [loady] in project [loady] region [us-central1]
✓ Deploying new service... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [loady] revision [loady-00001-nod] has been deployed and is serving 100 percent of traffic.
Service URL: https://loady-7jmiymbtlg-uc.a.run.app
正如您所见,这是最后一行。
答案1
这应该有效:
URL=$(gcloud run deploy loady 2>&1 |grep -o -m1 "https://\S*")
将命令2>&1
的 stdout 和 stderr 输出合并gcloud
到 stdout,以便在必要时|
对两者进行过滤。grep
grep
将仅输出 ( -o
) 第一个 ( -m1
) 与正则表达式https://\S*
(意思是https://everything.until.before/next/space
) 匹配的 URL。 的内容的最终标准输出$()
不可见地存储在 中$URL
。
由于 stderr 不能被$()
或捕获|
,您可以选择gcloud
通过使用 将命令的输出全部复制回 stderr 来显示命令的输出tee
。
URL=$(gcloud run deploy loady 2>&1 |tee /dev/stderr |grep -o -m1 "https://\S*")