muhas 09.12.2009 10:32
Tips & tricks — Mcabber vs notify-send
Когда я написал заметку Первое знакомство с mcabber Denis посетовал на "противное" устройства файла событий. А именно на нерабочий notify-send если файл событий является баш-скриптом и notify-send вызывается из него. Так как я использовал dzen2 то посоветовал тогда использовать pynotify и python скрипт.Но вчера сам решил использовать notify (привет аватаркам в будущем mcabber) и сам сталкнулся с такой же проблемой. Использовать pynotify был не вариан ибо уже написанный башскрипт было довольно лениво переписывать на python а сменить надо было всего лишь мелочь. В итоге не разбираясь в чем проблема просто взял необходимую команду в переменную и вывел её (вывод результата команды).
1 |
|
Если кто знает причину такого поведения выразите её, а то ленивое желание выяснить слишком уж ленивое (ага, работает не трож)
PS. если кому интересно то, могу расписать файл команд с комментами попутно описав принцип команд в текущем mcabber
Juev 09.12.2009 14:51 #
+ 3 -
Да, было бы интересно почитать о командах mcabber! ;)
эт не команды самого mcabber (о них в хелпе неплохо) а о командах в файле событий(написал "файл команд" чисто машинально) займусь на днях тады раз хоть кому-то интересно
Все равно интересно!!
Я утт подумал о том, что как то мимо меня прошел данный клиент, хочу попробовать... =)
Я утт подумал о том, что как то мимо меня прошел данный клиент, хочу попробовать... =)
Возвращаясь к теме:
Насколько я понимаю, проблема вызвана тем, что MCabber передаёт скрипту неправильный/недействительный stdout и stderr, а notify-send пытается их открыть, обламывается и падает.
Конструкция echo $(notify-send ...) перенаправляет вывод notify-send в участок памяти, чтобы использовать потом в качестве аргумента для echo (а echo в свою очередь "не боится" неправильного stdout).
Есть другой вариант -
notify-send -i ~/.mcabber/img/event.png "$NICK" "$TEXT" 2>/dev/null
то есть перенаправить stdout и stderr команды notify-send в "топку".
Есть также наиболее "правильный" способ: в начале скрипта поставить
exec &> /dev/null
в результате чего stdout и stderr будут перенаправлены в /dev/null для всего скрипта, что поможет избежать аналогичных проблем с другими программами, кроме notify-send.
Насколько я понимаю, проблема вызвана тем, что MCabber передаёт скрипту неправильный/недействительный stdout и stderr, а notify-send пытается их открыть, обламывается и падает.
Конструкция echo $(notify-send ...) перенаправляет вывод notify-send в участок памяти, чтобы использовать потом в качестве аргумента для echo (а echo в свою очередь "не боится" неправильного stdout).
Есть другой вариант -
notify-send -i ~/.mcabber/img/event.png "$NICK" "$TEXT" 2>/dev/null
то есть перенаправить stdout и stderr команды notify-send в "топку".
Есть также наиболее "правильный" способ: в начале скрипта поставить
exec &> /dev/null
в результате чего stdout и stderr будут перенаправлены в /dev/null для всего скрипта, что поможет избежать аналогичных проблем с другими программами, кроме notify-send.
поправка: во второй команде -
... &>/dev/null
или
... >/dev/null 2>/dev/null
или
... >/dev/null 2>&1
... &>/dev/null
или
... >/dev/null 2>/dev/null
или
... >/dev/null 2>&1