运行交互式 tty 时中断信号

运行交互式 tty 时中断信号

我有这样的 bash 脚本:

trap "exit" INT

read -p "your text : " opsi

echo $opsi

我的预期是当我在输入时提交 CTRL+C 时read,它将触发exit如下命令:

user@host:~$ ./script
your text :^C

<exit/close/logout user session>

那可能吗 ?

答案1

如果您想捕捉用户点击的时间,Ctrl-C那么您需要使用SIGINT信号。

trap exit SIGINT

exit当用户按下 Ctrl-C 时,这将执行命令(希望您已经在脚本的其他地方定义该命令)。

此外,避免使用作为命令名称,因为它很容易与定义脚本退出状态的exit内置命令发生冲突。exit

➜  ~ cat test.sh
#!/bin/bash

function script_exit()
{
    let ctrlc_count++
    echo
    if [[ $ctrlc_count == 1 ]]; then
        echo "Once more and I quit."
    else
        echo "That's it.  I quit."
        exit 1
    fi
}

trap script_exit SIGINT

read -p "your text: " opsi

echo $opsi
➜  ~ bash test.sh
your text: ^C
Once more and I quit.
^C
That's it.  I quit.

相关内容