我有一个Bash shell脚本,我想暂停执行,直到用户按下一个键。在DOS中,这可以通过pause命令轻松完成。在我的脚本中是否有一个Linux等效程序?
当前回答
这样,按下除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
其他回答
使用read是正确的——并且有一些调整使得它在cron和终端中都非常有用。
例子:
time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "
-n 120使read语句在2分钟后超时,因此它不会在cron中阻塞。
在终端中,它给出2分钟来查看rsync命令执行了多长时间。
然后后续的回显是,因此后续的bash提示符将在下一行中出现。
否则,当在终端中按Enter键时,它将直接显示在“continue…”之后的同一行。
这在多种Linux版本上都适用,而其他一些解决方案(包括这里最受欢迎的解决方案)则不适用。我认为它也更有可读性…
echo Press enter to continue; read dummy;
注意,需要将变量作为参数提供以供读取。
如果您只是需要暂停一个循环或脚本,并且您很乐意按Enter键而不是任何键,那么read本身就可以完成工作。
do_stuff
read
do_more_stuff
这不是终端用户友好的,但在您为自己编写快速脚本,并且需要暂停脚本以在后台手动执行某些操作的情况下,这可能足够了。
不带任何参数的读取将只在按enter键时继续。 如果您按下任何键,DOS暂停命令将继续。如果您想要这种行为,请使用read -n1。
试试这个:
function pause(){
read -p "$*"
}
推荐文章
- Linux Bash中双&和分号有什么区别?
- 如何合并2 JSON对象从2个文件使用jq?
- 在Bash中模拟do-while循环
- 在Bash中将输出赋给变量
- 在SSH会话中查找客户端的IP地址
- C++ Linux的想法?
- 如何为Fedora安装g++ ?
- 如何在Mac OS X 10.6中使硬件发出哔哔声
- Linux删除大小为0的文件
- 从Docker容器获取环境变量
- Spring引导应用程序作为服务
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- Windows和Linux上的c++编译:ifdef开关
- 如何循环通过一个目录递归删除具有某些扩展名的文件
- 在Bash中获取日期(比当前时间早一天)