BASH - использование ловушки ctrl + c
Я пытаюсь выполнить команды внутри script, используя чтение, и когда пользователь использует Ctrl + C, я хочу остановить выполнение команды, но не выйти из script.
Что-то вроде этого:
#!/bin/bash
input=$1
while [ "$input" != finish ]
do
read -t 10 input
trap 'continue' 2
bash -c "$input"
done
unset input
Когда пользователь использует Ctrl + C, я хочу продолжить чтение ввода и выполнение других команд. Проблема в том, что когда я использую команду вроде:
while (true) do echo "Hello!"; done;
Он не работает после того, как я набираю Ctrl + C один раз, но работает, как только я набираю его несколько раз.
Ответы
Ответ 1
Вам нужно запустить команду в другой группе процессов, и самый простой способ сделать это - использовать управление заданиями:
#!/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
Ответ 2
Попробуйте использовать следующий код:
#!/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="[email protected]"
while true; do
printf "\rType a command >>> "
read input
[[ $input == finish ]] && break
bash -c "$input"
done