2016-06-24 4 views
0

Я использую утилиту Boxfuse, а команда convert выполняет некоторую обработку, которая занимает некоторое время и имеет несколько строк вывода в ходе этой обработки.Подождите, пока команда полностью завершится в Bash

Я пытаюсь сохранить последнее слово с самого последнего выхода на переменную. Это работает примерно в половине случаев. Другая половина фактически сохраняет последнее слово одной из предыдущих строк вывода. Мой Баш выглядит так:

BFCONVERT=$(boxfuse convert MyApp:1.3.5) 
AMI=${BFCONVERT##* } 
echo $AMI 

Полный выход из этой команды, по нескольким линиям и через минуту или около того:

Boxfuse client v.1.19.12.1000 Copyright 2016 Boxfuse GmbH. All rights reserved. Account: myname (First Last) 
Waiting for AWS to create an AMI for myname/MyApp:1.3.5 in aws-region-1 (this may take up to 50 seconds) ... 
AMI created in 02:51.972s in aws-region-1 -> ami-12345678 

Иногда мой сценарий повторяет последнее слово из первой или второй линии а не последнее слово. Как заставить его ждать завершения команды?

+1

Звучит так, как будто 'boxfuse' либо записывает часть своего вывода в стандартную ошибку, либо выдает после того, как он разворачивает дочерний процесс, который на самом деле производит вывод. – chepner

+0

Он не делает ни того, ни другого в сценарии выше. –

+0

@AxelFontaine Возможно ли, что команда иногда не возвращает две последние строки? Кажется, что примерно в половине случаев я запускаю его. Я получаю свою фамилию (от первой строки) в качестве последнего слова без дополнительного вывода. –

ответ

0

Попробуйте, если это сработает.

lastline=`echo $BFCONVERT | tail -1` 
AMI=${lastline##* } 
echo $AMI 
+0

Это не похоже на трюк, поскольку я все еще иногда получаю результаты вроде «Last». –

+0

Как насчет ввода команды сна сразу после запуска вашей программы, а затем над строкой. спать 1 м; –

+0

Это, похоже, не решает проблему, равно как и цикл, пока не будет получен успешный ответ. –

Смежные вопросы