Как показать окно сообщения графического интерфейса от bash-скрипта в linux? - PullRequest
135 голосов
/ 10 августа 2008

Я пишу несколько небольших скриптов bash под Ubuntu Linux. Я хочу иметь возможность запускать их из графического интерфейса без необходимости в окне терминала для ввода какого-либо ввода или просмотра любого вывода.

Пока что единственный вводимый пароль - это пароль для sudo - и gksudo прекрасно с этим справляется. Но я еще не нашел простой способ показать окно сообщения. Есть ли какая-нибудь команда 'gkmessage'? Я бы предпочел что-то, присутствующее при установке Ubuntu по умолчанию, но я не против установить новый пакет, если это необходимо.

Ответы [ 12 ]

138 голосов
/ 20 января 2013

Если вы используете Ubuntu во многих дистрибутивах, команда notify-send выдаст одно из этих хороших скоропортящихся уведомлений в верхнем правом углу. Вот так:

notify-send "My name is bash and I rock da house"

B.e.a.utiful!

133 голосов
/ 10 августа 2008

Я верю Zenity будет делать то, что вы хотите. Он специально разработан для отображения диалогов GTK из командной строки и доступен как пакет Ubuntu .

71 голосов
/ 28 января 2014

Все упоминают zenity, кажется, что есть много других. Смешанный, но интересный список на 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

(не проверено)

В PPA

YAD: Zenity On Steroids [Отображать графические диалоги из сценариев оболочки] ~ Веб-обновление 8: блог 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

  • shellgui
  • Xdialog
  • gtkdialog

Вне темы (для терминала)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

Не стесняйтесь редактировать.

46 голосов
/ 05 августа 2009

Приложение zenity выглядит как раз то, что вы ищете.

Чтобы получить входные данные из zenity , вы можете указать переменную и сохранить в ней вывод zenity --entry . Это выглядит примерно так:

my_variable=$(zenity --entry)

Если вы посмотрите на значение в my_variable сейчас, это будет то, что было введено во всплывающем диалоговом окне ввода zenity.

Если вы хотите дать какой-то запрос о том, что пользователь (или вы) должны ввести в диалоговом окне, добавьте переключатель - текст с нужной вам меткой. Это выглядит примерно так:

my_variable=$(zenity --entry --text="What's my variable:")

У Zenity есть много других приятных опций, предназначенных для конкретных задач, поэтому вы можете также проверить их с помощью zenity --help . Одним из примеров является опция - calendar , которая позволяет выбирать дату из графического календаря.

my_date=$(zenity --calendar)

Что дает красиво отформатированную дату в зависимости от того, на что нажал пользователь:

echo ${my_date}

дает:

08/05/2009

Есть также опции для селекторов, ошибок, списков и т. Д.

Надеюсь, это поможет.

15 голосов
/ 10 августа 2008

Я нашел команду xmessage , которая достаточно хороша.

7 голосов
/ 09 февраля 2017

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"
7 голосов
/ 10 августа 2008

Вот небольшой скрипт Tcl, который будет делать то, что вы хотите. По умолчанию в Ubuntu должен быть установлен интерпретатор Wish.

#!/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"`
5 голосов
/ 17 сентября 2008

Существует также dialog и версия KDE kdialog. dialog используется slackware, поэтому он может быть не сразу доступен в других дистрибутивах.

3 голосов
/ 09 ноября 2017

, если ничего не присутствует. Вы можете запустить 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);'
3 голосов
/ 10 марта 2016

А как насчет предупреждения Ubuntu . Его можно использовать после любой операции, чтобы сообщить о завершении и даже показать значок красного креста, если операция завершена с ошибками

ls -la; alert
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...