我有一个Bash shell脚本,我想暂停执行,直到用户按下一个键.在DOS中,使用"pause"命令可以轻松完成.我可以在脚本中使用Linux等价物吗?
read
做这个:
user@host:~$ read -n1 -r -p "Press any key to continue..." key [...] user@host:~$
该-n1
它只等待的单个字符指定.在-r
将其放入原始模式,这是必要的,否则,如果按类似反斜杠,它不会注册,直到你遇到下一个关键.在-p
指定的提示,如果包含空格,必须用引号括起来.的key
,如果你想知道他们按下了哪个键,在这种情况下,你可以访问它通过论证只需要$key
.
如果您正在使用Bash,您还可以指定超时-t
,这会导致读取在未按下键时返回失败.例如:
read -t5 -n1 -r -p 'Press any key in the next five seconds...' key if [ "$?" -eq "0" ]; then echo 'A key was pressed.' else echo 'No key was pressed.' fi
我使用这些非常短的方式,它们就像@theunamedguy和@Jim解决方案,但另外还有超时和静音模式.
我特别喜欢最后一种情况,并在很多脚本中使用它,直到用户按下为止Enter.
命令
输入解决方案
read -rsp $'Press enter to continue...\n'
逃脱解决方案 (使用-d $'\ e')
read -rsp $'Press escape to continue...\n' -d $'\e'
任何关键解决方案 (使用-n 1)
read -rsp $'Press any key to continue...\n' -n 1 key
# echo $key
预先选择的问题 (使用-ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
# echo $key
超时解决方案 (带-t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
睡眠增强别名
read -rst 0.5; timeout=$?
# echo $timeout
说明
-r指定原始模式,不允许组合字符,如"\"或"^".
-s指定静默模式,因为我们不需要键盘输出.
-p $' prompt '指定提示,该提示需要在$'和'之间,以允许空格和转义字符.请注意,您必须在带有美元符号的单引号之间放置以使转义字符受益,否则您可以使用简单的引号.
-d $' \ e '指定escappe作为分隔符,因此作为当前条目的最后一个字符,可以放置任何字符,但要小心放置用户可以键入的字符.
-n 1指定它只需要一个字符.
-e指定readline模式.
-i $' Y '在读取模式下将Y指定为初始文本.
-t 5指定超时为5秒
密钥服务,以防您需要知道输入,在-n1情况下,已按下的键.
$?用于知道最后一个程序的退出代码,用于读取,142在超时情况下,0正确输入.投入$?如果你需要在某些命令后测试它,请尽快在变量中,因为所有命令都会重写$?
read
没有任何参数只有按Enter键才会继续.pause
如果按任意键,DOS 命令将继续.read –n1
如果您想要这种行为,请使用.
这对我有很多种Linux版本,其中一些其他解决方案没有(包括这里最流行的).我觉得它也更具可读性......
echo Press enter to continue; read dummy;
请注意,需要将变量作为参数提供给read
.
read -n1
不便携.可行的方法可能是:
( trap "stty $(stty -g;stty -icanon)" EXIT LC_ALL=C dd bs=1 count=1 >/dev/null 2>&1 )除了使用
read
,只需要按下ENTER
继续提示你可以做:sed -n q