Цикл bash перезапускает программу

Я установил playerctlдля этой задачи (и для управления Spotify с помощью клавиш dwm, например META+F8(toggle play )).

Затем его можно использовать, например, так:

status=$(playerctl -p spotify status)
artist=$(playerctl -p spotify metadata artist)
album=$(playerctl -p spotify metadata album)
title=$(playerctl -p spotify metadata title)
length=$(playerctl -p spotify metadata mpris:length | sed 's/.\{6\}$//')
if [[ "$status" == "Playing" ]] ; then status="▶" ; else status="◼" ; fi

echo "$artist/$album/$title [$status] ${length}s"

Однако

$lengthнемного интереснее. Обычное значение (, извлеченное из metadata), равно:

'mpris:length': ,

Я обнаружил, что последние 6 символов (093000 )не важны (? ), а остальные — продолжительность песни в секундах, отсюда и sed. Вы также можете изменить это в minutes:seconds, используя этот код здесь . Я протестировал его с некоторыми образцами песен (, а также с более длинными ), и он работает.
К сожалению, я не нашел подходящего источника для своих предположений или оставшихся символов..

0
07.04.2020, 19:43
3 ответа

amule работает на переднем плане. Ваш скрипт никогда не доберется до sleep 240. Запустите amuleв фоновом режиме, чтобы скрипт мог продолжить работу.

#!/bin/sh

while :; do
   amule &     # run in background
   sleep 240
   killall amule
      # or   wmctrl -c aMule
   wait         # in case amule needs time to close
done
0
28.04.2021, 23:18
watch -n 240 'amule;wmctrl -c aMule'
0
28.04.2021, 23:18

Вы можете попробовать заменить wmctrl -c aMule;на killlall amuleили pkill amule, в зависимости от того, какой из killallили pkillу вас установлен. Вам может понадобиться добавить опцию -KILLперед amule, если amule игнорирует сигнал TERM.

0
28.04.2021, 23:18

Теги

Похожие вопросы