알림 보내기를 통해 알림을 보내려고 합니다.
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로 읽혀지므로 올바른 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 }')"