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

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

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

Заранее спасибо за Вашу обратную связь.

11
задан Community 23 May 2017 в 12:32
поделиться

2 ответа

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

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3)
30
ответ дан 3 December 2019 в 02:30
поделиться

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

.
2
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

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