Отфильтровать вывод и установить переменную

Я хотел бы запустить сценарий 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

Итак, как вы видите, последняя строчка там.

0
задан 4 June 2021 в 11:03

1 ответ

Это должно работать:

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*")
3
ответ дан 28 July 2021 в 11:32

Другие вопросы по тегам:

Похожие вопросы: