Я хочу написать файл сценария оболочки, который имеет графический интерфейс с несколькими полями ввода для входа пользователя. Я уже попробовал zenity
. Любые идеи или советы будут оценены.
Yad может быть полезным в этом отношении, это - ветвление zenity с большим количеством функций, одним из них способность создать формы.
Вот очень простой пример формы:
#!/bin/bash
frmdata=$(yad --title "Test Form" --form --field "Address" --field="Name")
frmaddr=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $1 }')
frmname=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $2 }')
echo $frmaddr > test.txt
echo $frmname >> test.txt
Вышеупомянутый сценарий отобразит форму как это:
После того, как Вы вводите свои данные и нажимаете ОК или совершаете нападки, вводят в клавиатуру, данные формы будут записаны в текстовый файл под названием test.txt, я использую awk для разделения данных формы, которые являются строкой с каналом как разделитель полей, я полагаю, что существует прямой способ получить данные без awk, но я не yad эксперт, проверьте, что проект размещает и задает вопросы, можно найти более изящный путь.
Как получить и установить yad здесь:
http://www.webupd8.org/2010/12/yad-zenity-on-steroids-display.html
проект yad домой:
больше примеров здесь:
http://technostripe.com/yad-a-fork-of-zenity-with-more-features/
http://code.google.com/p/yad/wiki/Examples
Я опаздываю здесь, но это может все еще быть полезно.
xDialog - нечто похожее, - это список поиска из свежего мяса . tcl / tk - еще один популярный инструмент для таких задач.
Плохое решение потребовало бы, чтобы пользователь заполнил список и, наконец, пометил все строки:
zenity --list --text "Fill every row, and mark all rows before hitting 'OK'" --column "title" --print-column=2 --multiple --column "value" --editable "name" "(please override)" "host" "" "ip" ""
Я признаю, что это неудобно.
Мой ответ может быть запоздалым (думаю, на два года позже), но, поскольку многие люди все еще ищут ответ на этот же вопрос, это может быть полезно. Я также ищу решение «лучше, чем zenity / yad / xdialog», и я нашел две очень хорошие программы:
gtkdialog: http://code.google.com/ p / gtkdialog / вы можете создать полный пользовательский интерфейс для bash, который продолжает работать во время взаимодействия с вашим backendscript. Он находится в активной разработке и также используется разработчиками щенков. его собственный язык, похожий на glade, более мощный, чем libglade, однако он может запускать libglade XML.
gtkserver: http://www.gtk-server.org/ Этот шаг идет еще дальше и выполняется как сопроцесс при взаимодействии с вашим bash-скриптом через каналы, сообщения или TCP -ports. Он работает не с файлом описания в формате XML, а с GTK-командами, которые вы вызываете из командной строки bash. Действительно очень мощный: -)
gtkdialog больше нет в репозиториях, но вы можете найти последние версии в PPA ( https://launchpad.net/~dnjl/ + archive / build / + sourcepub / 2986274 / + list-archive-extra )
У gtkserver нет PPA или deb AFAIK, поэтому его нужно скомпилировать из исходного кода.
Одно из решений - использовать Zenity, а просто отображать каждое приглашение в отдельности. Первая подсказка будет для первого поля, а затем, когда пользователь нажимает «ОК», вы можете запросить второе поле.
Похоже, что вы достигли пределов написания сценариев, и, возможно, захотите заняться разработкой интерфейса, похожего на приложение, используя что-то вроде QT или GTK.
Можно хотеть попробовать CommandUI. Это не требует кодирования.