Linux 相当于 DOS 暂停是什么?

新手上路,请多包涵

我有一个 Bash shell 脚本,我想在其中暂停执行,直到用户按下一个键。在 DOS 中,这很容易通过 pause 命令完成。我可以在我的脚本中使用 Linux 等价物吗?

原文由 jt. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
2 个回答

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

原文由 Jim 发布,翻译遵循 CC BY-SA 3.0 许可协议

我经常使用这些非常短的方法,它们类似于@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 将转义符指定为分隔符,因此作为当前条目的最后一个字符,可以放置任何字符,但要小心放置用户可以键入的字符。

-n 1 指定它只需要一个字符。

-e 指定 readline 模式。

-i $’ Y 将 Y 指定为 readline 模式下的初始文本。

-t 5 指定超时 5 秒

服务以防您需要知道输入,在 -n1 情况下,是已按下的键。

美元? 用于知道最后一个程序的退出代码,用于读取,142超时,0正确输入。放\(?如果您需要在某些命令之后对其进行测试,请尽快将其放入变量中,因为所有命令都会重写 \)?

原文由 y.petremann 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏