多次 ctrl + c 冻结程序

多次 ctrl + c 冻结程序

我有一个“主”bash 脚本,它运行另一个 bash 脚本(23.sh)。在主脚本中,我有一个函数可以捕获Ctrl+C操作并提示输入密码。如果密码输入正确,则会杀死主文件。

但是,我有一个问题:当用户快速连续输入Ctrl+C两次时,脚本会冻结(请参阅下面脚本中的注释)。

我该如何处理这个问题?本质上,我希望函数 ctrl_c() 是递归的,这样当用户在函数内使用Ctrl+C时,它仍然有效。我记得很久以前(大约 10 年)我就被告知函数中的递归是一个馊主意! 有什么解决办法吗?

#!/bin/bash
# This is the main file that runs data collection code 23.sh in an infinite loop

function ctrl_c() {
    clear
    echo "** Trapped CTRL-C0"
    sleep 1s
    echo "'''''''''''''''''''''''''''''''''''''''"
    echo "Enter Admin password and click [ENTER]: "
    # When user enters ctrl+c in here the program freezes up
    read passPhrase
    if [ $passPhrase == "pass" ]; then
        echo "Password correct"

        for i in `seq 1 5`; do
            sleep 1
            echo -n "."
            # pkill 23.sh
            # pkill main.sh
        done
        pkill main.sh
    else
        echo "Incorrect pass phrase.  'Service Selection' screen will in 5 seconds load"
        for i in `seq 1 5`; do
            sleep 1
            echo -n "."
        done
        # ./23.sh
    fi
}

trap ctrl_c INT

while :
do
    ./23.sh
done

相关内容