【发布时间】:2009-11-29 18:25:56
【问题描述】:
我使用以下代码将用户字符指定给变量 G:
read G
但是,为了继续执行我的脚本,我需要按 Enter 按钮。 是否可以以某种方式设置读取命令,使其在收到来自 stdin 的一个字母后立即将进程向前显示到下一行?
【问题讨论】:
我使用以下代码将用户字符指定给变量 G:
read G
但是,为了继续执行我的脚本,我需要按 Enter 按钮。 是否可以以某种方式设置读取命令,使其在收到来自 stdin 的一个字母后立即将进程向前显示到下一行?
【问题讨论】:
如果您使用的是 Bash:
read -n1 G
您的系统默认配置为使用 dash,而 dash 不支持此功能,因此您还需要更改脚本的第一行以指定您希望使用 bash:
#!/bin/bash
【讨论】:
我认为dd 可能能够做到这一点,所以我尝试了一下,但没有成功。然而,谷歌为我找到了this,我在这里对其进行了改编:
readOne () {
local oldstty
oldstty=$(stty -g)
stty -icanon -echo min 1 time 0
dd bs=1 count=1 2>/dev/null
stty "$oldstty"
}
在脚本的开头定义一次这个函数,然后你可以像这样使用它:
char=$(readOne) # get the character
echo $char # print the character (or you can do something else with it)
【讨论】: