在静默模式下读取后,在bash脚本中捕获ctrl + c

iam*_*129 6 bash shell

我正在处理的脚本以静默模式读取单个字符并将其存储到$ c

下面是一个测试器脚本,它做了一个例子:

    #!/bin/bash

    gracefulExit() {
          echo "exiting..."
          #other stuff would go here
          exit 1
    }

    trap gracefulExit INT

    while [ 1 = 1 ]
    do
          read -s -r -n1 c
          echo "character read"
    done
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,如果你使用ctrl + c来打破脚本,shell会保持静默模式(我看不到任何我输入的内容),直到我退出它才会恢复正常.我注意到这只发生在我捕获ctrl + c之后(没有陷阱,它从静音模式中踢出).我的脚本要求我陷阱所以我可以清理.

这是4.2.10

有任何想法吗?

非常感谢您的帮助!

mik*_*erv 0

我猜你可以使用 DD,尽管我不明白你到底想改变什么。

c=$(stty raw;dd bs=1 count=1 if=$(tty) status=none;stty sane)
Run Code Online (Sandbox Code Playgroud)

stdin这至少会在您输入一个字节后立即停止读取。只需键入一个键即可$c设置。