我有一个Bash shell脚本,我想暂停执行,直到用户按下一个键。在DOS中,这可以通过pause命令轻松完成。在我的脚本中是否有一个Linux等效程序?


当前回答

不带任何参数的读取将只在按enter键时继续。 如果您按下任何键,DOS暂停命令将继续。如果您想要这种行为,请使用read -n1。

其他回答

这在多种Linux版本上都适用,而其他一些解决方案(包括这里最受欢迎的解决方案)则不适用。我认为它也更有可读性…

echo Press enter to continue; read dummy;

注意,需要将变量作为参数提供以供读取。

我已经建立了一个小程序来实现暂停命令在Linux。我已经在我的GitHub回购上传了代码。

要安装它,

git clone https://github.com/savvysiddharth/pause-command.git
cd pause-command
sudo make install

安装后,您现在可以使用类似于在windows中所做的暂停命令。

它还支持可选的自定义字符串,如read。

例子:

pause "Pausing execution, Human intervention required..."

使用这个,C/ c++程序使用像system("pause");现在与linux兼容。

这个函数在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代表大正义!

使用read是正确的——并且有一些调整使得它在cron和终端中都非常有用。

例子:

time rsync (options)
read -n 120 -p "Press 'Enter' to continue..." ; echo " "

-n 120使read语句在2分钟后超时,因此它不会在cron中阻塞。

在终端中,它给出2分钟来查看rsync命令执行了多长时间。

然后后续的回显是,因此后续的bash提示符将在下一行中出现。

否则,当在终端中按Enter键时,它将直接显示在“continue…”之后的同一行。

如果您只是需要暂停一个循环或脚本,并且您很乐意按Enter键而不是任何键,那么read本身就可以完成工作。

do_stuff
read
do_more_stuff

这不是终端用户友好的,但在您为自己编写快速脚本,并且需要暂停脚本以在后台手动执行某些操作的情况下,这可能足够了。