Проблема команды notify-send в сценарии оболочки

У меня есть текстовый файл b.txt со следующим текстом:

notify-send -i gtk-info "Как дела" -h строка:x-canonical-private-synchronous: все

У меня есть сценарий оболочки со следующим кодом:

#!/bin/sh

while true;
do if [ -s b.txt ]
then
value="$(cat b.txt)"
exec $value
sleep 0.1
fi
done

Когда я запускаю скрипт, он выдает следующую ошибку и уведомление не отображается:

Неверное количество опций.

Но когда текстовый файл содержит команду с двумя словами:

notify-send -i gtk-info "Hows You" -h строка:x-canonical-private-synchronous: все

уведомление отображается отлично.

Эта проблема возникает только тогда, когда я выполняю уведомление-отправку через сценарий оболочки. Как отобразить уведомление с сообщением, содержащим любое количество слов?

2 ответа

Решение

Попробуйте заменить exec $value с eval $value

exec это совершенно не то, что использовать здесь. Может быть попробовать

#!/bin/sh

while true;
do
  if [ -s ./b.txt ]
  then
    . ./b.txt
    sleep 0.1
  fi
done

Но выполнение этого в узком цикле кажется странной вещью, которую нужно сделать, и выполнение файла неизвестного происхождения в лучшем случае сомнительно. Вы уверены, что этот текстовый файл всегда будет содержать именно то содержимое, которое вы ожидаете, и не может быть изменен никем? Почему эта команда помещается в отдельный файл?

Другие вопросы по тегам