如何停止 bash 脚本直到用户按下Space?
我想在我的脚本中提出这个问题
按空格继续或CTRL+C退出
然后脚本应该停止并等待,直到按下空格键。
答案1
您可以使用read
:
read -n1 -s -r -p $'Press space to continue...\n' 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
' '
将上面的空格替换''
为 Enter 键、$'\t'
Tab 键。
答案2
pause
此 SO Q&A 中讨论的方法可能是您在 Windows 上处理 BAT 文件时习惯的行为的最佳替代方法。
$ read -rsp $'Press any key to continue...\n' -n1 key
例子
在这里,我运行上面的代码,然后只需按任意键,在本例中为该D键。
$ read -rsp $'Press any key to continue...\n' -n1 key
Press any key to continue...
$
参考
答案3
您可以创建一个pause
函数以供其在脚本中的任何位置使用,例如:
#!/bin/bash
pause(){
while read -r -t 0.001; do :; done # dump the buffer
read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n'
}
echo "try to press any key before the pause, it won't work..."
sleep 5
pause
echo "done"
答案4
这是一种适用于 和 的方法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
大正义!