过滤输出并设置变量

过滤输出并设置变量

我想运行一个 bash 脚本,该脚本调用一个命令,然后使用第一个命令的部分输出在脚本中设置一个变量。就我而言,我想将变量设置URLhttps://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*")

相关内容