BASH Trap CTRL + C и выход из сценария полностью - PullRequest
0 голосов
/ 10 мая 2019

Я добавил ловушку в свой bash-скрипт, поэтому при нажатии CTRL + C появляется сообщение Do you want to quit ? (y/n)

Это работает в большинстве частей скрипта, но не в других.

Я создал простой пример, который показывает, что он всегда терпит неудачу.

#!/bin/bash

quit() {
echo "Do you want to quit ? (y/n)"
  read ctrlc
  if [ "$ctrlc" = 'y' ]; then
    exit
  fi
}

trap quit SIGINT
trap quit SIGTERM

while true; do
    echo -e "\n\e[91mIs everything done ? (y/n)\e[0m"
    read -i "y" -e yn
    case $yn in
        [Nn]* ) continue;;
        [Yy]* ) 

        echo -e "Done"
        break;;
        * ) echo -e "\e[91mPlease answer yes or no.\e[0m";;
    esac
done

Почему, когда я нажимаю CTRL + C, это всплывает Do you want to quit ? (y/n), но не позволяет мне выйти? Как мне это решить?

Спасибо

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Приведенный выше код работает без ошибок в оболочке bash. Я подозреваю, что вы запустили скрипт в dash SHELL (SHELL для некоторых компьютеров по умолчанию - dash ).

Запустите ваш скрипт, используя следующие методы,

/ bin / bash

или

Дайте разрешение на выполнение файла сценария (chmod 777 script.sh) и запустите файл, как показано ниже,

. / Script.sh

0 голосов
/ 10 мая 2019

Как я прокомментировал выше - внутри функции exit обрабатывается как синоним возврата и не завершает программу. Если это ваша проблема, попробуйте

kill -term $$ # send this program a terminate signal

вместо exit. Это мощно, но в целом эффективно.

Обратите внимание, что если у вас также есть ловушка SIGTERM, которая будет выполняться.

...