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


当前回答

Read是这样做的:

user@host:~$ read -n1 -r -p "Press any key to continue..." key
[...]
user@host:~$ 

-n1指定它只等待一个字符。-r将它置于原始模式,这是必要的,否则,如果你按下反斜杠之类的键,它直到你按下一个键才会注册。-p指定提示符,如果包含空格,则必须加引号。只有当你想知道他们按了哪个键时,key参数才有必要,在这种情况下,你可以通过$key访问它。

如果使用Bash,还可以使用-t指定超时,这将导致read在未按下键时返回失败。例如:

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

其他回答

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

我已经建立了一个小程序来实现暂停命令在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兼容。

这样,按下除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是这样做的:

user@host:~$ read -n1 -r -p "Press any key to continue..." key
[...]
user@host:~$ 

-n1指定它只等待一个字符。-r将它置于原始模式,这是必要的,否则,如果你按下反斜杠之类的键,它直到你按下一个键才会注册。-p指定提示符,如果包含空格,则必须加引号。只有当你想知道他们按了哪个键时,key参数才有必要,在这种情况下,你可以通过$key访问它。

如果使用Bash,还可以使用-t指定超时,这将导致read在未按下键时返回失败。例如:

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

Read -n1是不可移植的。一种便携的方法可以做到这一点:

(   trap "stty $(stty -g;stty -icanon)" EXIT
    LC_ALL=C dd bs=1 count=1 >/dev/null 2>&1
)   </dev/tty

除了使用read,如果只是按ENTER继续提示,你可以这样做:

sed -n q </dev/tty