shell 脚本中的通知发送命令问题

notify-send command issue in shell script

我有一个文本文件 b.txt,其中包含以下文本:

notify-send -i gtk-info "How Are You" -h string:x-canonical-private-synchronous:anything

我有一个 shell 脚本,代码如下:

#!/bin/sh

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

当我 运行 脚本时,它抛出以下错误并且不显示通知:

Invalid number of options.

但是当文本文件包含只有两个单词的命令时:

notify-send -i gtk-info "Hows You" -h string:x-canonical-private-synchronous:anything

通知显示完美

仅当我通过 shell 脚本执行通知发送时才会出现此问题。 如何显示包含任意字数的消息的通知?

exec 在这里使用完全是错误的。也许试试

#!/bin/sh

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

但是 运行 这在一个紧密的循环中似乎是一件奇怪的事情,执行一个来源不明的文件充其量是可疑的。您确定此文本文件将始终包含您期望的内容并且任何人都无法修改吗?为什么这个命令首先放在一个单独的文件中?

尝试用 eval $value

替换 exec $value