Как показать окно сообщения GUI из сценария bash в linux?
Я пишу несколько небольших сценариев bash под Ubuntu linux. Я хочу иметь возможность запускать их из GUI без необходимости окна терминала для ввода любого ввода или просмотра любого вывода.
пока требуется только ввод пароля для sudo - и gksudo обрабатывает это нормально. Но я еще не нашел простой способ показать окно сообщения. Есть ли какая-то команда "gkmessage"? Я бы предпочел что-то присутствующее в установке Ubuntu по умолчанию, но я не против установки нового пакет при необходимости.
12 ответов
Я считаю Зениты будет делать то, что вы хотите. Он специально разработан для отображения диалоговых окон GTK из командной строки, и он доступен как пакета Ubuntu.
Если вы используете Ubuntu многие дистрибутивы в notify-send
команда бросит одно из этих приятных скоропортящихся уведомлений в правом верхнем углу. Вот так:
notify-send "My name is bash and I rock da house"
Б. Е. а.прекрасный!
все упоминают Зенит, кажется, есть много других. Смешанный, но интересный список находится в http://alternativeto.net/software/zenity/
во-первых, пример zenity с разметкой форматирования текста, заголовком окна, меткой кнопки.
zenity \
--info \
--text="<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title="Coffee time" \
--ok-label="Sip"
gxmessage
gxmessage "my text"
xmessage
xmessage
очень старый, поэтому он стабилен и, вероятно, доступен во всех дистрибутивах, использующих X (поскольку он распространяется с X). Это настраиваемый через ресурсы X, для тех, кто использует Linux или Unix достаточно долго, чтобы знать, что это значит (.Xdefaults
кому-нибудь ?).
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
kdialog
(не проверял)
в ППА
YAD: Zenity на стероидах [отображение графических диалогов из сценариев оболочки] ~ Web Upd8: Ubuntu / Linux blog. Не похоже на диалоги автоматического размера.
echo My text | yad \
--text-info \
--width=400 \
--height=200
больший пример
yad \
--title="Desktop entry editor" \
--text="Simple desktop entry editor" \
--form \
--field="Type:CB" \
--field="Name" \
--field="Generic name" \
--field="Comment" \
--field="Command:FL" \
--field="Icon" \
--field="In terminal:CHK" \
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button="WebUpd8:2" \
--button="gtk-ok:0" \
--button="gtk-cancel:1"
другим не в стандартных репозиториях Ubuntu
- shellgui
- xdialog
- gtkdialog
Off-topic (для терминала)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
не стесняйтесь редактировать.
на Зениты приложение, похоже, то, что вы ищете.
принимать входные данные от Зениты, вы можете указать переменную и иметь выход zenity --запись спас его. Это выглядит примерно так:
my_variable=$(zenity --entry)
если вы посмотрите на стоимость в my_variable теперь это будет то,что было набрано в диалоговом окне ввода zenity.
если вы хотите дать какую-то подсказку, что пользователь (или Вы) должен войти в диалоговое окно, добавить --text переключатель с меткой, которую вы хотите. Это выглядит примерно так:
my_variable=$(zenity --entry --text="What's my variable:")
Zenity имеет много других приятных опций, которые предназначены для конкретных задач, поэтому вы можете проверить их с помощью zenity -- помогите. Одним из примеров является --календарь опция, которая позволяет вам выбрать дату из графического календаря.
my_date=$(zenity --calendar)
что дает красиво отформатированную дату на основе что пользователь нажал на:
echo ${my_date}
выдает:
08/05/2009
есть также опции для селекторов слайдеров, ошибок, списков и так далее.
надеюсь, что это помогает.
вот небольшой скрипт Tcl, который будет делать то, что вы хотите. Интерпретатор пожеланий должен быть установлен по умолчанию на Ubuntu.
#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent
назовем это так:
myanswer=`gui-prompt "type your answer and press enter"`
alert
и notify-send
Кажется, то же самое. Я использую notify-send
для сообщений без ввода, поскольку он не крадет фокус, и я не могу найти способ остановить zenity и т. д. от этого.
например,
# This will display message and then disappear after a delay:
notify-send "job complete"
# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"
появилась dialog
и версия KDE kdialog
. dialog
используется slackware, поэтому он может быть не сразу доступен в других дистрибутивах.
если больше ничего нет. вы можете запустить xterm и эхо в нем, как это:
xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'
Как насчет Ubuntu предупреждение. Он может быть использован после любой операции, чтобы предупредить его закончил и даже показать Красный Крест значок, если operaton был finnished с ошибками
ls -la; alert
Kdialog и dialog хороши, но я бы рекомендовал Zenity. Быстро, легко и намного лучше выглядит xmessage или диалог.