ガスケットに問題があります

ガスケットに問題があります

通知を送信して通知を送信しようとしています。

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

出力が1行であると確信している場合にのみ可能です。以下は/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 }')"

ここに画像の説明を入力してください。

関連情報