我有一个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在未按下键时返回失败。例如:
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
其他回答
Read是这样做的:
user@host:~$ read -n1 -r -p "Press any key to continue..." key
[...]
user@host:~$
-n1指定它只等待一个字符。-r将它置于原始模式,这是必要的,否则,如果你按下反斜杠之类的键,它直到你按下一个键才会注册。-p指定提示符,如果包含空格,则必须加引号。只有当你想知道他们按了哪个键时,key参数才有必要,在这种情况下,你可以通过$key访问它。
如果使用Bash,还可以使用-t指定超时,这将导致read在未按下键时返回失败。例如:
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
这样,按下除ENTER以外的任何键仍然会转到新行
read -n1 -r -s -p "Press any key to continue..." ; echo
它比Windows暂停更好,因为你可以改变文本使它更有用
read -n1 -r -s -p "Press any key to continue... (cant find the ANY key? press ENTER) " ; echo
这个函数在bash和zsh中都可以工作,并确保到终端的I/O:
# Prompt for a keypress to continue. Customise prompt with $*
function pause {
>/dev/tty printf '%s' "${*:-Press any key to continue... }"
[[ $ZSH_VERSION ]] && read -krs # Use -u0 to read from STDIN
[[ $BASH_VERSION ]] && </dev/tty read -rsn1
printf '\n'
}
export_function pause
把它放进你的。{ba,z}shrc代表大正义!
使用read是正确的——并且有一些调整使得它在cron和终端中都非常有用。
例子:
time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "
-n 120使read语句在2分钟后超时,因此它不会在cron中阻塞。
在终端中,它给出2分钟来查看rsync命令执行了多长时间。
然后后续的回显是,因此后续的bash提示符将在下一行中出现。
否则,当在终端中按Enter键时,它将直接显示在“continue…”之后的同一行。
试试这个:
function pause(){
read -p "$*"
}