Как показать окно графического интерфейса сообщение от bash-скрипт в Linux?


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

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

12 124

12 ответов:

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

Если вы используете 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

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

в PPA

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

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

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

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

The Зениты приложение, кажется, то, что вы ищете.

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

my_variable=$(zenity --entry)

если вы посмотрите на стоимость в my_variable теперь это будет все, что было набрано в диалоговом окне zenity pop up entry.

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

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

Zenity имеет много других хороших вариантов, которые предназначены для конкретных задач, так что вы можете проверить их, а также с Зениты --помочь. Одним из примеров является --календарь опция, которая позволяет вам выбрать дату из графического календаря.

my_date=$(zenity --calendar)

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

echo ${my_date}

выдает:

08/05/2009

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

надеюсь, что это помогает.

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

здесь немного 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 для ввода сообщений, а не украсть фокус, и я не могу найти способ, чтобы остановить Зениты и т. д. от этого поступка.

например,

# 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 alert. Он может быть использован после любой операции, чтобы предупредить его закончил и даже показать значок красного креста, если operaton был finnished с ошибками

ls -la; alert

Зениты - Это очень точный инструмент, который я думаю, что вы ищете.

или

zenity --help

Kdialog и диалог оба хороши, но я бы рекомендовал Zenity. Быстро, легко и намного лучше выглядит xmessage или диалог.