垫片有问题

垫片有问题

我正在尝试通过通知发送发送通知

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 }')"

在此输入图像描述

相关内容