我有一个 Bash shell 脚本,我想在其中暂停执行,直到用户按下一个键。在 DOS 中,这很容易通过 pause
命令完成。我可以在我的脚本中使用 Linux 等价物吗?
原文由 jt. 发布,翻译遵循 CC BY-SA 4.0 许可协议
我经常使用这些非常短的方法,它们类似于@theunamedguy 和@Jim 解决方案,但还具有超时和静默模式。
我特别喜欢最后一种情况,并在许多循环运行的脚本中使用它,直到用户按下 Enter
。
read -rsp $'Press enter to continue...\n'
read -rsp $'Press escape to continue...\n' -d $'\e'
read -rsp $'Press any key to continue...\n' -n 1 key
# echo $key
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
# echo $key
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 ‘ 将转义符指定为分隔符,因此作为当前条目的最后一个字符,可以放置任何字符,但要小心放置用户可以键入的字符。
-n 1 指定它只需要一个字符。
-e 指定 readline 模式。
-i $’ Y ‘ 将 Y 指定为 readline 模式下的初始文本。
-t 5 指定超时 5 秒
键 服务以防您需要知道输入,在 -n1 情况下,是已按下的键。
美元? 用于知道最后一个程序的退出代码,用于读取,142超时,0正确输入。放\(?如果您需要在某些命令之后对其进行测试,请尽快将其放入变量中,因为所有命令都会重写 \)?
原文由 y.petremann 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.4k 阅读
4 回答4.1k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答855 阅读✓ 已解决
2 回答3.3k 阅读
1 回答1.1k 阅读✓ 已解决
read
这样做:-n1
指定它只等待一个字符。-r
将其置于原始模式,这是必要的,因为否则,如果您按下反斜杠之类的东西,它不会注册,直到您按下下一个键。-p
指定提示,如果它包含空格,必须用引号引起来。key
参数仅在您想知道他们按下了哪个键时才需要,在这种情况下,您可以通过$key
访问它。如果您使用 Bash,您还可以使用
-t
指定超时,这会导致读取在未按下键时返回失败。例如: