我们怎样才能在发出信号后回到正确的位置(我们指定的位置)?

How can we get back in the right place (that we specify) after signal?

我已经制作了自己的信号处理程序,但我需要先返回

# I NEED TO JUMP HERE

echo -e "Input name of the file"
read filename

所以我可以多次输入文件名。但是当我执行信号(Ctrl + C)时,我进入处理程序然后在我执行信号的地方(所以我只能输入一次文件名)。 是否有任何命令(如 C 中的 siglongjump 和 setlongjump)可以帮助我控制整个过程。

count=0
flag=0

handl(){
echo
if test $flag -eq 0
then echo "You did not input filename"
fi

file $filename | grep "C source" > /dev/null
a=$?

if test $a -eq 0
then
count=$((count+1))
fi
echo "Number of C source files: $count"
}

trap handl 2

echo -e "Input name of the file"
read filename
flag=1

sleep 1

你可以模块化你的脚本,只在信号中打印一个提示 处理程序:

#!/usr/bin/env bash

count=0
flag=0

handl(){
    echo
    if test $flag -eq 0
    then echo "You did not input filename"
         prompt
         return
    fi

    file "$filename" | grep "C source" > /dev/null
    a=$?

    if test $a -eq 0
    then
        count=$((count+1))
    fi
    echo "Number of C source files: $count"
}

prompt(){
    echo -e "Input name of the file"
}

input(){
    read -r filename
    flag=1
    echo sleep 1
    sleep 1
}

trap handl 2

while true
do
    prompt
    input
done