#linux #shell #ubuntu #zenity
#linux #оболочка #ubuntu #zenity
Вопрос:
Я пытаюсь написать сценарий оболочки, чтобы напомнить пользователю. Я хочу показать диалоговое окно в определенное время.
Я использую zenity для отображения диалогового сообщения
Вот мой сценарий
#!bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
at now <<EOF
/bin/zenity --info --text="hello word"
EOF
Но это ничего не показывает
Пожалуйста, помогите мне.
Комментарии:
1. (а) Ваша строка shebang искажена: должна быть
#!/bin/bash
; (б) что происходит, когда вы запускаетеzenity
команду напрямую? (/bin
это необычное место дляzenity
— кроме того, почему бы ему не быть в$PATH
?).2. (a) но я только написал ‘#!bin/bash’, все работает нормально (b) Я командую <pre>zenity —info —text=»привет, слово»<code>, он сразу отобразит окно сообщения.
3. Если вы попытаетесь запустить свой скрипт напрямую с помощью этого shebang (при условии, что вы сделали его исполняемым), он не будет запущен. Если вы
bash
явно вызовете и передадите ему скрипт в качестве аргумента, он будет работать нормально (тогда 1-я строка будет просто еще одним комментарием). Что касается актуальной проблемы: мне кажется, что ответ @abannerth является правильным решением.
Ответ №1:
Поскольку команда at
, выполняемая с помощью, выполняется не в той же оболочке и в той же среде (где у вас уже есть графический дисплей), вам также необходимо указать, какой дисплей использовать, например, установив переменную DISPLAY
среды при использовании zenity:
DISPLAY=:0.0 zenity --info --text="hello world"
Кроме того, если вы запускаете zenity, записав его абсолютный путь, убедитесь, что он действительно есть. Для меня в Ubuntu 14.04 установлен /usr/bin/zenity
zenity, поэтому с вашим примером это не сработает.