我正在尝试通过通知发送发送通知
notify-send 'System' 'Dist files is already' $(du -h /var/cache/distfiles/ | tr -d '/var/cache/distfiles/')
但是由于我未知的原因,我需要的间隔无法显示,它输出:
Invalid number of options.
但是如果我像这样删除那里的垫片:
notify-send 'System' 'Dist files is already'$(du -h /var/cache/distfiles/ | tr -d '/var/cache/distfiles/')
它会完美地工作。请给我解释一下为什么会这样,我太笨了。
答案1
该命令tr
未按您的预期工作:
-d, --删除 删除其中的字符设置1, 不翻译
tr
删除的意思单身的SET1 中的字符,例如:
$ echo foobar | tr -d fb
ooar
现在让我们看看man notify-send
:
概要 通知发送[选项]{概括} [身体]
所以你必须通过2参数(除了选项)。例如:
$ notify-send 'System' 'foo' 'bar'
Invalid number of options.
$ notify-send 'System' 'foo'
<notification appears>
让我们看看输出du -h /boot 2>/dev/null
:
4,0K /boot/efi
3,4M /boot/grub/x86_64-efi
2,3M /boot/grub/fonts
8,0M /boot/grub
146M /boot
你那里有2每个字符串排!所以你的命令结果(使用/boot
示例目录):
notify-send 'System' 'Dist files is already' 4,0K /boot
如果输出只有 1 行,但正如你所看到的,它可能有很多行。所以,一堆争论。
当您删除空格时,生成的字符串将被读取为 1,因此它看起来像是正确的 2 个参数。
因此,将命令更改为:
notify-send 'System' "Dist files is already $(du -h /var/cache/distfiles/)"
仅当您确定输出只是一行时。这是一个带有/root
文件夹的示例
$ notify-send 'System' "Dist files is already $(du -h /root 2> /dev/null)"
或者
$ notify-send 'System' "Dist files is already $(du -h /root | awk '{ print $1 }')"