Ловушка не выходит из цикла - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь выполнить очистку с помощью команды 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

1 Ответ

2 голосов
/ 10 марта 2020

Сигнал 1 - SIGHUP, который поднимается, если терминал отключается, например, потому что вы были подключены с удаленного компьютера, и ваш сеанс был прерван из-за отключения сети. Когда вы нажимаете Ctrl + C, отправляется SIGINT.

trap safe_cancel HUP INT

Это может быть, а может и не быть связано с ошибкой, которую вы получаете с Git.

...