Как показать окно сообщения графического интерфейса из сценария bash в Linux?
Вопрос
Я пишу несколько небольших bash-скриптов под Ubuntu Linux.Я хочу иметь возможность запускать их из графического интерфейса без необходимости использования окна терминала для ввода каких-либо данных или просмотра вывода.
Пока что единственный требуемый ввод — это пароль для sudo, и gksudo прекрасно с этим справляется.Но я еще не нашел простого способа показать окно сообщения.Есть ли какая-то команда gkmessage?Я бы предпочел, чтобы что-то присутствовало в стандартной установке Ubuntu, но я не против установить новый пакет, если это необходимо.
Решение
Я считаю Зенити сделаю то, что ты хочешь.Он специально разработан для отображения диалоговых окон GTK из командной строки и доступен как пакет 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
очень старый, поэтому он стабилен и, вероятно, доступен во всех дистрибутивах, использующих 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
Кдиалог
(не испытано)
В PPA
ЯД:Zenity On Steroids [Отображение графических диалогов из сценариев оболочки] ~ Web Upd8:Блог Ubuntu/Linux.Кажется, не происходит автоматическое изменение размера диалогов.
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.
- Шелгуи
- xdialog
- gtkdialog
Не по теме (для терминала)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
Не стесняйтесь редактировать.
А пыл Кажется, это то, что вы ищете.
Чтобы получить данные от пыл, вы можете указать переменную и получить результат зенити --запись сохранено в нем.Это выглядит примерно так:
my_variable=$(zenity --entry)
Если вы посмотрите на значение в моя_переменная теперь это будет то, что было введено во всплывающем диалоговом окне ввода zenity.
Если вы хотите дать своего рода подсказку о том, что пользователь (или вы) должен ввести в диалоговом окне, добавьте --текст переключитесь на нужную метку.Это выглядит примерно так:
my_variable=$(zenity --entry --text="What's my variable:")
У Zenity есть множество других приятных опций для конкретных задач, так что вы также можете проверить их с помощью зенити --помощь.Одним из примеров является --календарь опция, позволяющая выбрать дату из графического календаря.
my_date=$(zenity --calendar)
Это дает красиво отформатированную дату в зависимости от того, на что нажал пользователь:
echo ${my_date}
дает:
08/05/2009
Также есть опции для селекторов ползунков, ошибок, списков и так далее.
Надеюсь это поможет.
Я нашел хсообщение команда, что вполне достаточно.
Вот небольшой скрипт Tcl, который сделает то, что вы хотите.Интерпретатор Wish должен быть установлен в 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, поэтому он может быть недоступен в других дистрибутивах.
Как насчет Ubuntu тревога.Его можно использовать после любой операции, чтобы предупредить о ее завершении и даже отобразить значок красного креста, если операция была завершена с ошибками.
ls -la; alert
если больше ничего нет.вы можете запустить 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);'
Kdialog и диалог хороши, но я бы порекомендовал Zenity.Быстро, легко и намного лучше выглядит x-сообщение или диалог.