2009-12-28 2 views
10

Я пытаюсь использовать whiptail, поскольку это легкая альтернатива dialog и, по-видимому, устанавливается по умолчанию в большинстве систем (т. Е. Людям не нужно ходить и устанавливать их, если они «забыты» или не установлены по умолчанию). Я проверил question #1562666 для нескольких примеров здесь, но я ищу альтернативу для перенаправления вывода, так что задает переменную окружения, а не просто записывает на диск.whiptail: Как перенаправить вывод на переменную окружения?

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

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

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

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

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

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

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

+0

Похоже, когда Хлыстохвост имеет свой stdin/stdout перенаправлен, он не отображается (с помощью $ (...) или ... |). Ваше решение выглядит довольно хорошо, учитывая поведение whiptail. BTW, на моей машине debian, у меня есть whiptail, но нет диалога по умолчанию, на opensuse, у меня есть диалог и никакого существующего whiptail в официальных репозиториях. – Zeograd

+0

@Zeograd по крайней мере на RHEL whiptail входит в пакет «newt». – Kimvais

+0

Справа, thx Kimvais. «zypper search whiptail» потерпел неудачу на меня, даже если информация указала, что он находится. – Zeograd

ответ

28

Это, вероятно, потому, что Хлыстохвост использует стандартный ввод и стандартный вывод для печати в поле ввода, так что вы не можете перенаправить поток ошибок непосредственно на стандартный вывод, но вам нужно поменять их местами, например:

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

Я подтвердил, что это работает. –

+2

С меткой WORKSFORME. Спасибо, Кимва! – jbatista

+0

У меня вопрос. Почему вы положили '3> & 1 1> & 2 2> & 3' в конце whiptail? Без этого команда не работает, но я не знаю почему. –

2

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

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

  • Нет связанных вопросов^_^