Сценарий Bash не заканчивается Ctrl + C

Мой скрипт не может быть завершен клавишей Ctrl + C. Это ошибка.

Пожалуйста, объясните, как изменить мой скрипт, чтобы сделать его завершаемым с помощью Ctrl + C.

#!/bin/bash while true; do paplay /usr/share/sounds/phone.wav done 

  • Использование подстановок / подстановочных знаков при открытии файлов с терминала
  • Как получить две команды?
  • Удаление пространства в начале переменных данных
  • Передача аргументов с пробелами и кавычками в скрипт (без цитирования всего)
  • Лучший способ принять варианты «Да» из командной строки
  • как выразить строку в оболочке?
  • Можно ли показывать текущий номер строки истории при выполнении обратного поиска в bash?
  • Как я могу получить доступ к буферу истории в sh? (не в Баше)
  • 2 Solutions collect form web for “Сценарий Bash не заканчивается Ctrl + C”

    Если вы поймаете SIGINT в родительской оболочке и выйдете из оболочки, она также сбрасывает папиру:

     trap exit SIGINT; while true; do paplay /usr/share/sounds/phone.wav ; done 

    Похоже, что paplay блок блокирует сигнал INT, и это влияет на то, что родительская оболочка не запускает обработчик по умолчанию.

    Установка обработчика в родительскую оболочку, в которой вы перезагружаете обработчик, и ререйз сигнала, вероятно, лучше решает его:

     trap 'trap - SIGINT; kill -SIGINT $$' SIGINT; while :; do paplay /usr/share/sounds/linuxmint-login.wav ; done 

    exit подход процесс запуска предполагает, что его ребенок вышел добровольно, тогда как со вторым подходом это похоже на то, что сценарий был убит с SIGINT который был).

    На самом деле вопрос о paplay , который может блокировать сигналы, или (как намечено в Arch Wiki ), может быть просто слишком занят.

    Вы могли бы сделать сценарий проще для остановки, поставив sleep 1 в цикле.

    Linux и Unix - лучшая ОС в мире.