whiptail: Как перенаправить вывод в переменную окружения?

Я пытаюсь использовать whiptail, так как это легкая альтернатива диалогу, и, похоже, она установлена ​​по умолчанию в большинстве систем (т. Е. Людям не нужно обходиться и устанавливать его, если он "забыт" или не был установлен по умолчанию).). Я проверил вопрос #1562666 для нескольких примеров здесь, но я ищу альтернативу для перенаправления вывода, чтобы установить переменную окружения, а не просто записать на диск.

Например, когда я пытаюсь с диалогом, это работает (я вижу диалоговое окно, и переменная окружения установлена):

result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30)
echo Result=$result

Тем не менее, это не работает при использовании whiptail вместо диалогового окна, так как диалоговое окно никогда не появляется. Я должен перенаправить его в файл на диске и прочитать его, например:

result=$(tempfile) ; chmod go-rw $result
whiptail --inputbox "Enter some text" 10 30 2>$result
echo Result=$(cat $result)
rm $result

Он работает, и я могу использовать один и тот же временный файл от начала до конца (удаляя его, когда скрипт заканчивается). Но неудобно заставлять использовать диск только для этого, вместо того, чтобы хранить все это в памяти (перенаправление на переменную окружения).

Поэтому я спрашиваю: я что-то забыл - или мне действительно нужно использовать диск при использовании whiptail?

Заранее благодарю за отзыв.

2 ответа

Решение

Вероятно, это связано с тем, что whiptail использует stdin и stdout для печати поля ввода, поэтому вы не можете перенаправить stderr напрямую на stdout, но вам необходимо поменять их местами, например:

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)

Похоже, что whiptail(1) записывает свой управляющий вывод в терминал, основываясь на настройке переменной окружения TERM. Следовательно, вы не можете использовать стандартный поток вывода whiptail(1) для установки переменной. Кроме того, whiptail(1) записывает пользовательский ввод поля ввода в стандартный поток ошибок, поэтому, опять же, вы не можете использовать его стандартный поток вывода для установки переменной.

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