가스켓에 문제가 있습니다

가스켓에 문제가 있습니다

알림 보내기를 통해 알림을 보내려고 합니다.

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

여기에 이미지 설명을 입력하세요.

관련 정보