如何将read命令设置为执行而无需在shell中按Enter键?

时间:2009-11-29 18:25:57

标签: shell unix

我使用下面的代码将用户角色的给定分配给变量G:

read G

然而,为了继续执行我的脚本,我需要按回车键。 是否有可能以某种方式将read命令设置为在收到stdin的一个字母后立即显示进程到下一行?

2 个答案:

答案 0 :(得分:5)

如果你正在使用Bash:

read -n1 G

您的系统默认配置为使用短划线,短划线不支持此功能,因此您还需要更改脚本的第一行以指定您希望使用bash:

#!/bin/bash

答案 1 :(得分:2)

我认为dd可能会这样做,所以我尝试了它并没有得到任何结果。但是,Google为我找到了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)