LINUX.ORG.RU

Чтение output программы в bash


0

1

Играюсь с dialog,хочется использовать его в скриптах,но я никак не могу найти способ,с помощью которого можно читать program output (в dialog он там показывает выбранные пользователем пункты меню,введённые данные и.т.д.).

Гуглю,маню. Тщетно. Не подскажете,что делать?

Deleted

man dialog

Проблема: пользовательский ввод в большинстве случаев выводится на stderr.
Использовать приходится примерно так:
dialog --some=parameters 2>/tmp/dialog
answer=$(cat dialog)

AITap ★★★★★
()
Ответ на: комментарий от AITap
# гарантируем что еррор не попадёт в вывод
dialog --output-fd 3 ...... 3> /tmp/dialog || exit 1
# Читаем без использования форка
read answer < /tmp/dialog || exit 2
# Диалог, сука, глючный
[ -n "$answer" ] || exit 3
mmarkk
()
Ответ на: комментарий от mmarkk

Спасибо за подсвеченный вариант,тоже попробую.

Deleted
()
Ответ на: комментарий от Olegymous

Получится, но при этом while.....done не сможет поменять переменные за пределами этой строки, т.к. он запускается в форке (подпроцесс, сабшелл и т.п.)

То есть, да, можно, а смысл?

Можно ещё исполнить чонть типа

read answer < <( dialog ...... ) но это будет нэймед пайп, из которого построчное чтение крайне медленное (по символу) а ещё, запись туда может сопроводждаться зависаниями, а ещё SIGPIPE, а ещё зависание в случае неоткрытия дескриптора в форке.... ну кароче.. это плохой способ.

через файл - правильный, годный способ. По крайней мере для шелл-программирования.

mmarkk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.