Поймайте Ctrl + C в Shell Script и выполните определенную задачу [дубликат]

Консалтинг C ++ 03, 22.2.2.1.2 / 11, форматы наследуются от scanf и друзей, которые, в свою очередь, все говорят, что преобразованная последовательность символов «необязательно подписана», даже для тех, у которых нет знака вывод. strtoul то же самое.

Итак, предположим, вы могли бы сказать, что стандарт, который задает поведение, является C89 для C ++ 03, C99 для C ++ 11.

Поскольку - оказывается допустимым только как первый символ, я предполагаю, что обходной путь - проверить его с помощью peek перед использованием operator>>.

19
задан DPenner1 16 September 2015 в 01:44
поделиться

2 ответа

Вам нужно запустить команду в другой группе процессов, и самый простой способ сделать это - использовать управление заданиями:

#!/bin/bash 

# Enable job control
set -m

while :
do
    read -t 10 -p "input> " input
    [[ $input == finish ]] && break

    # set SIGINT to default action
    trap - SIGINT

    # Run the command in background
    bash -c "$input" &

    # Set our signal mask to ignore SIGINT
    trap "" SIGINT

    # Move the command back-into foreground
    fg %-

done 
10
ответ дан cdarke 24 August 2018 в 05:52
поделиться

Попробуйте использовать следующий код:

#!/bin/bash
# type "finish" to exit

# function called by trap
other_commands() {
    printf "\rSIGINT caught      "
    sleep 1
    printf "\rType a command >>> "
}

trap 'other_commands' SIGINT

input="$@"

while true; do
    printf "\rType a command >>> "
    read input
    [[ $input == finish ]] && break
    bash -c "$input"
done
10
ответ дан Jocelyn 24 August 2018 в 05:52
поделиться