Я пытаюсь использовать 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?
Заранее спасибо за Вашу обратную связь.
Вероятно, это связано с тем, что хвост хлыста использует 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) записывает пользовательский входной блок в стандартный поток ошибок, так что, опять же, вы не можете использовать его стандартный выходной поток для установки переменной.
.