bash与DOS的pause命令等效吗?


13

我需要在shell脚本上暂停以显示警告,然后再继续。例如,在DOS上,它是这样的:

doit.bat:

[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]

我怎样才能做到这一点?目前,睡眠命令似乎可以解决问题,它很简单,但并不完全是这样:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]

Answers:


10

类似于

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input

14
在Bash中,可以将其缩短为read -p "prompt"。可以使用以下help命令检索有关Shell内置组件的更多详细信息help read
Lekensteyn'2

@Lekensteyn-虽然没有尾随换行符。
Matt H

@MattH就像echo -n和一样printf。如果按Enter,您将获得换行符。
Lekensteyn 2012年

不适用于ubuntu 12.04-请阅读argumenst
ses

@ses在12.04.4上使用bash,没有要求read具有参数。使用sh(通常bashsh兼容模式下调用)read需要一个参数。如果从头开始执行脚本,#!/bin/sh则会看到后一种行为
Huckle

2

read -p "Press any key to continue or CTRL-C to abort"在我的脚本中在14.04下工作正常。正如@Lekensteyn在上面的评论中所述,自12.04.4以来似乎一直是这种情况。“帮助阅读”页面指出:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read

1

我最喜欢的用法是设置默认超时,以便脚本也可以在无人看管的情况下运行:

echo "Press any key to continue..."
read -n1 -t5 any_key

哪里:

  • -n1 告诉读取接受任何单个字符
  • -t5 告诉它等待最多5秒钟的输入

我几乎只在CentOS下与Bash一起工作,所以我不能保证在其他Linux变体上都可以使用它,但是由于它是Bash,所以我希望它能工作。我很想知道是否可以!:)


0

等待停止脚本的简单方法是kill -STOP $$从脚本中调用:暂停后,脚本将在收到-CONT信号后继续其工作。

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"

一个人如何将CONT信号发送到脚本?
David Foerster 2015年

-2
echo "press enter to continue"
read unusedVariable
echo "running these 3 lines in .sh file, this echo will never be seen, unless you have a really slow computer"

将这3行放在.sh文件中并运行


1
-1这应该做什么,为什么?为什么最后一个echo命令的输出不会显示,它与计算机的速度有什么关系?
David Foerster,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.