什么是Linux相当于DOS暂停?
我有一个Bash shell脚本,我想暂停执行,直到用户按下一个键。 在DOS中,这很容易用“暂停”命令来完成。 有我可以在我的脚本中使用的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的解决scheme,但另外还有超时和静音模式。
我特别喜欢最后一种情况,并在循环运行的许多脚本中使用它,直到用户按Enter键 。
命令
-
input解决scheme
read -rsp $'Press enter to continue...\n'
-
逃生解决scheme (带-d $'\ e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
任何关键解决scheme (使用-n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
预先select的问题 (带-ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
超时解决scheme (带-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秒的超时时间
在需要知道input的情况下键入,在-n1的情况下,已经按下的键。
$? 用来知道最后一个程序的退出代码,用于读取,142在超时的情况下,0正确的input。 把$? 在一个variables中,如果你需要在某些命令后testing它,所有的命令都会重写$?
没有任何参数的read
将只会继续,如果你按下input。 如果您按任意键,DOS pause
命令将继续。 如果您想要这种行为,请使用read –n1
。
read -n1
是不可移植的。 一个便携的方式来做同样的事情可能是:
( trap "stty $(stty -g;stty -icanon)" EXIT LC_ALL=C dd bs=1 count=1 >/dev/null 2>&1 ) </dev/tty
除了使用read
,只需按ENTER
继续提示你可以这样做:
sed -nq </dev/tty
这对我来说在多种Linux上都有效,其中一些其他解决scheme没有(包括这里最stream行的解决scheme)。 我觉得它也更可读
echo Press enter to continue; read dummy;
请注意,需要提供一个variables作为参数来read
。
如果你只需要暂停一个循环或脚本,而且很高兴按Enter键而不是任何键,那么自己read
就可以完成这项工作。
尝试这个:
function pause(){ read -p "$*" }