나는 cmus와 상호 작용하는 쉘 스크립트를 작성하고 알림 전송을 사용하여 트랙 정보를 알려주려고 노력해 왔습니다. 이제는 작동하지 않습니다. 주로 xargs가 알림 전송에 2개의 인수를 전달하지 않는 것 같기 때문입니다. 하나만 보내는데 왜 그런지 모르겠습니다. 올바른 출력을 얻기 위해 sed로 생각할 수 있는 모든 작업을 수행했지만 작동하지 않습니다. 그리고 2개의 매개변수로 통지-전송을 사용하면 작동하므로 통지-전송에는 문제가 없다고 생각합니다.
cmus-remote -Q의 출력은 다음과 같습니다.
status paused
file /home/dennis/music/Coheed And Cambria/GOODAP~1/05 Crossing the Frame.mp3
duration 207
position 120
tag artist Coheed & Cambria
tag album Good Apollo I'm Burning Star IV Volume One: From Fear Through the Eyes of Madness
tag title Crossing the Frame
tag date 2005
tag genre Rock
tag tracknumber 5
tag albumartist Coheed & Cambria
set aaa_mode all
set continue true
set play_library true
set play_sorted false
set replaygain disabled
set replaygain_limit true
set replaygain_preamp 6.000000
set repeat false
set repeat_current false
set shuffle true
set softvol false
set vol_left 100
set vol_right 100
내 코드는 끔찍합니다. 이제 막 쉘 스크립팅을 배우기 시작했습니다. 죄송합니다.
#!/bin/sh
#
# notify of song playing
info="$(cmus-remote -Q)"
title="`echo "$info" | grep 'tag title' | sed "s/'//g" | sed 's/tag title \(.*\)/'\''\1'\''/g'`"
artist="`echo "$info" | grep 'tag artist' | sed "s/'//g" | sed 's/tag artist \(.*\)/ '\''\1/g'`"
album="`echo "$info" | grep 'tag album ' | sed "s/'//g" | sed 's/tag album \(.*\)/ \1'\''/g'`"
stupid="${title}${artist}$album"
echo "$stupid" | xargs notify-send
답변1
xargs
예상대로 작동합니다. 각 줄이 매개변수로 사용됩니다. 여러 매개변수가 필요한 경우 줄바꿈으로 구분하세요.
{echo "$title"; echo "$artist"; echo "$album"} | xargs notify-send
즉, 매우 간단한 작업에 너무 많은 작업을 수행하고 있는 것입니다.
title="$(echo "$info" | sed -n 's/^tag title //p')"
artist="$(echo "$info" | sed -n 's/^tag artist //p')"
album="$(echo "$info" | sed -n 's/^tag album //p')"
notify-send "$title" "$artist" "$album"
(또 다른 문제에 유의하세요: notify-osd
Pango를 통해 전달된 메시지를 전송하므로 Pango 태그로 오해될 수 있는 모든 항목을 이스케이프해야 합니다. 이는 실제로 HTML 및 XML과 같다는 것을 의미합니다 <
. 위의 내용 >
은 &
이 문제를 처리하려고 시도하지 않습니다).