Linux

墊片有問題

  • February 4, 2021

我正在嘗試通過 notify-send 發送通知

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/')

它會完美地工作。請解釋一下為什麼會這樣,我太笨了。

該命令tr無法按您的預期工作:

-d,--刪除
刪除**SET1**中的字元,不翻譯

這意味著從 SET1 中tr刪除單個字元,例如:

$ 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 行,但如您所見,它可能是多行。所以,一堆論據。


當您刪除空格時,結果字元串被讀取為一個,因此它看起來像正確的 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 }')"

在此處輸入圖像描述

引用自:https://unix.stackexchange.com/questions/632665