我正在编写korn shell脚本。我需要把称为“按任意键继续”的功能来执行脚本的其余部分。我怎样才能实现这个目标?
提前致谢
答案 0 :(得分:2)
您可以使用读取命令:
read -n1 -r -p "Press space to continue..." key
if [ "$key" = '' ]; then
# Space pressed, do something
# echo [$key] is empty when SPACE is pressed # uncomment to trace
else
# Anything else pressed, do whatever else.
# echo [$key] not empty
fi
这是一个非常简单的脚本。
#!/usr/bin/ksh
echo "First Method"
read -s -n 1 -p "Press any key to continue..."
# insert echo here for cleaner output
echo
echo "Second Method"
echo "Press any key to continue..."
read -s -n 1 any_key
echo "Now exiting"
exit 0
要从键盘输入,请使用read命令。 read命令从键盘获取输入并将其分配给变量。这是一个例子:
echo -n "Enter some text > "
read text
echo "You entered: $text"
答案 1 :(得分:1)
read
是输入命令(通常是表单终端)。 <Enter>
周围几乎没有办法,这是告诉read开始处理输入的方法。
如果您想在任何击键后开始处理,您必须通过stty
深入了解终端设置,更改为原始模式和.....
当你离开时,很可能你的终端心情不好。 避免副作用的努力通常不值得效果。
想想,你改变了终端模式,等待击键,你是否允许Ctrl-C,退格,ESC,......进行击键或者是否需要特殊处理?你改变了终端模式,你现在就可以了。如果进程被杀死,如何将终端设置为理智状态,....
如果你正面临一个巨大的挑战,那就去吧: - )
答案 2 :(得分:0)
好的,我知道为什么我的帖子被删除了。我再来一次。
我要做的是创建一个函数“ readOne”,并在需要时调用它。
readOne () {
tput smso
echo "Press any key to return \c"
tput rmso
oldstty=`stty -g`
stty -icanon -echo min 1 time 0
dd bs=1 count=1 >/dev/null 2>&1
stty "$oldstty"
echo
}
这是作者的解释:
tty驱动程序控制您键入的输入行如何传送到程序。通常,tty驱动程序将等待,直到有完整的行可用为止。它还处理诸如退格键之类的东西,因此程序不需要。 stty命令使您可以更改tty驱动程序的工作方式。 “ stty -a”将显示所有设置。您应该这样做以查看可用的内容。
“ stty -g”也显示所有设置。但这是经过编码的,您无法理解输出。但是您可以保存输出,并将其反馈给stty命令。所以: oldtty ='stty -g' stty $ oldstty 将保存并恢复tty驱动程序的原始设置。
stty -icanon -echo分钟1次0 在tty驱动程序中设置了一些选项。 -icanon关闭所有特殊字符处理。现在,退格键将被传递给程序,而不是被处理。回车不会终止一行。所以现在最小和时间控制何时完成读取。 “最小1”表示我们需要至少一个字符。 “时间0”表示我们不会等待一段时间才能完成读取。因此,从程序中读取的每个字符可能仅在一个字符之后返回。 -echo只是关闭echo。我不会那样做的。 dd是准备读取未按行组织的数据的程序。此dd将读取一个数据块(计数= 1)。该块的长度为一个字符(大小= 1)。因此,dd将读取一个字符并返回脚本。 最后的回声将光标移到下一行。