无需“Enter”即可捕获用户输入

无需“Enter”即可捕获用户输入

我有以下任务:

这些脚本提示用户输入参数,最后根据这些参数运行特定命令。 (想象一下脚本,它首先提示输入文件名,然后提示输入参数chmod)。

问题是,脚本必须由特定的按键序列终止(例如,当用户键入“halt”而不输入Ctrl“-”时C)。

答案1

您可以使用readwith-n 1逐个字符地读取并构建您所读取的字符串。然后你可以决定每个角色出现时要做什么:

val=""
while read -n 1 char; do
    if [[ $char = "" ]]; then
        printf 'Got an enter and the string is %s' "$val"
        # do whatever else you want with it here
        val="" # reset it to get the next param
    else
        val="$val$char" # append input
    fi
    if [[ $val = "halt" ]]; then
        exit
    fi
done

答案2

根据任务的描述,您不应该逐个字符地处理输入。一行一行地读就可以了。逐个字符地阅读不会对你有帮助。

如果除了退出脚本之外不需要对Ctrl+执行任何操作,则不要执行任何操作。C这是默认行为。

如果您需要在Ctrl+上运行一些自定义代码C(可能会或可能不会通过退出脚本来结束),终端驱动程序中有一个内置机制。按此键发送信号 信号情报。在 shell 中定义一个陷阱为信号。

cleanup () {
  … whatever you need to do before the script exits …
}
trap 'echo >&2 "Aborting"; cleanup; exit 130' INT
while IFS= read -r line; do
done

相关内容