Нечто подобное может работать для вас
#!/bin/bash
doStuff() {
local pidOfParent="$1"
for i in $(seq 10); do
echo "stuff ${i}" > /dev/null
sleep 1
done
kill $pidOfParent
}
doStuff $$ &
doStuffPid="$!"
read -n1 -rp 'Press any key to continue' && kill $doStuffPid
Разбивка
doStuff
- это наша функция, которая содержит то, что вы хотите запустить в фоновом режиме, то есть музыку.
$$
- это PID запущенного скрипта, который мы передаем в нашу функцию, чтобы он стал более информативным pidOfParent
, в котором мы kill
после того, как закончим что-то делать.
&
после вызова функции переводит ее в фоновый режим.
$!
получает PID последней выполненной команды, поэтому теперь у нас есть PID фонового процесса, который мы только что начали.
Вы указали read -n1 -rp 'Press any key to continue'
, поэтому я могу предположить, что вы уже знаете, что он делает, && kill $doStuffPid
будет kill
фоновым процессом после выхода read
(это также работает, если вы завершаете сценарий с помощью ^C
).