Запустить команду, когда скрипт bash остановлен - PullRequest
5 голосов
/ 30 октября 2008

Как я могу в bash-скрипте выполнить команду, когда пользователь останавливает скрипт (с помощью ctrl - c)?

В настоящее время у меня есть это:

afplay file.mp3

while true:
do osascript -e "set volume 10"
end

Но я бы хотел, чтобы он выполнял killall afplay, когда пользователь закончил с ним, независимо от того, нажата ли команда -c или другое нажатие клавиши.

Ответы [ 3 ]

9 голосов
/ 30 октября 2008

trap 'killall afplay' EXIT

4 голосов
/ 30 октября 2008

Использование trap.

trap "kill $pid" INT TERM EXIT

Также избегайте killall или pkill, поскольку это может убить не связанные процессы (например, из другого экземпляра вашего скрипта или даже другого скрипта). Вместо этого поместите PID игрока в переменную и убейте только этот PID.

2 голосов
/ 30 октября 2008

Вам необходимо добавить оператор trap в ваш bash-скрипт:

trap 'killall afplay' EXIT

Обратите внимание, что это не будет работать, если процесс bash отправит сигнал KILL (9), поскольку процессы не смогут перехватить этот сигнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...