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

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

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

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

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 в цикле.

  • Закладка autocompletion и история в tcsh
  • Функция stateful bash
  • Строка «удалить слово» оболочки удаляет слишком много символов
  • Могу ли я иметь историю истории оболочки, как расширяются шаблоны?
  • Приоритет параметров команды?
  • Почему эта составная команда {...} не выходила при ошибке, когда используется с ||?
  • В чем разница между * и *. * При копировании?
  • Как вызвать скрипт с шаблоном подстановки и еще два аргумента?
  • Как открыть сессию bash incognito?
  • Как создать дерево процессов?
  • Приглашение PS1 на локальную и удаленную консоль
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.