Linux
墊片有問題
我正在嘗試通過 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 }')"