Я хотел бы запустить сценарий 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
Итак, как вы видите, последняя строчка там.
Это должно работать:
URL=$(gcloud run deploy loady 2>&1 |grep -o -m1 "https://\S*")
2> & 1
объединяет выходные данные stdout и stderr команды gcloud
в stdout, необходимые для |
для фильтрации как через grep
, если это необходимо.
grep
выведет только ( -o
) первый ( -m1
) URL, соответствующий регулярному выражению https: // \ S *
(имеется в виду https: //everything.until.before/next/space
). Последний стандартный вывод содержимого $ ()
невидимо сохраняется в $ URL
.
Поскольку stderr не захватывается $ ()
или |
, вы можете по-прежнему отображать вывод команды gcloud
, дублируя ее все возвращается в стандартный поток с помощью tee
.
URL=$(gcloud run deploy loady 2>&1 |tee /dev/stderr |grep -o -m1 "https://\S*")