@rad_li

Как правильно отправить сообщение для notify-send через nc?

В Убунту есть всплывающая уведомлялка notify-send. Использовать можно так:
notify-send "Система оповещения" "Пример работы"

Первый блок текста это заголовок уведомления, второй блок само сообщение. Все работает, но понадобилось использовать уведомления по сети. Для этого использую утилиту nc (netcat). На принимающей стороне слушаем определенный порт и отправляем полученные данные в notify-send:
nc -l 10230 | { a=`cat` && notify-send $a; }

На стороне отправителя уведомления:
echo "Заголовок" "Текст" | nc 192.168.10.2 10230

Тоже работает, но есть нюанс. Если в заголовке или тексте сообщения есть пробел, выдает ошибку "Invalid number of options". То есть вот такое уже не пройдет:
echo "Заголовок" "Текст сообщения" | nc 192.168.10.2 10230


Подскажите как быть?
  • Вопрос задан
  • 3047 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
На отправляющей стороне посылать вместе с кавычками: echo '"Заголовок" "Текст сообщения"'
На принимающей использовать присланные кавычки по назначению: { a=`cat` && eval "notify-send $a"; }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Да, результат ожидаемый. В выводе echo невозможно отличить, где закончилось одно выражение и началось другое, если в выражениях присутствуют пробелы.
Можно попробовать передать через сеть два выражения разделенных специальным символом, который точно не будет встречаться ни в одном из них, например так:
На отправителе:
echo "Заголовок" "%" "Текст" | nc 192.168.10.2 10230
На приемнике:
IFS="%" while read a b; do notify-send $a $b; done < <(nc -l 10230)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы