Я пытаюсь выполнить очистку с помощью команды trap
. Функция safe_cancel
вызывается, когда я нажимаю Ctrl + C
, но сценарий не завершается. Я должен использовать Ctrl + Z
, чтобы приостановить выполнение сценария, а затем kill
.
. foo
- это другой сценарий, который у меня есть в моем PATH, который возвращает exit 1
, если он получает неверный аргумент.
Чего мне не хватает или я делаю неправильно в этом сценарии?
#!/bin/bash
safe_cancel () {
echo "Cancelling..."
# do some cleanup here
exit 1
}
trap safe_cancel 1
while true; do
read -p "Choose an option: " someOption < /dev/tty
foo $someOption
if [[ $? == 0 ]]
then
break
exit 0
fi
done
Дополнительные сведения:
Я пишу этот сценарий для Git крюк. Очевидно, git хуки не совсем ожидают стандартного входа / выхода, поэтому я должен явно использовать /dev/tty
Edit:
При использовании этого как части git крюк, я получаю сообщение об ошибке read: read error: 0: Input/output error
и это бесконечное л oop