关于bash:与DOS暂停等效的Linux是什么?

关于bash:与DOS暂停等效的Linux是什么?

What is the Linux equivalent to DOS pause?

我有一个Bash shell脚本,我想在其中暂停执行,直到用户按下某个键为止。 在DOS中,可以使用" pause"命令轻松完成此操作。 我可以在脚本中使用等效的Linux吗?


read这样做:

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

-n1指定仅等待一个字符。 -r会将其置于原始模式,这是必需的,因为否则,如果您按反斜杠之类的东西,则在您按下下一个键之前它不会注册。 -p指定提示,如果提示包含空格,则必须将其引起来。仅当您想知道他们按下了哪个键时才需要key参数,在这种情况下,您可以通过$key访问它。

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

1
2
3
4
5
6
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

我使用了很多非常简短的方法,它们就像@theunamedguy和@Jim解决方案一样,但是还有超时和静默模式。

我特别喜欢最后一种情况,并在许多循环运行的脚本中使用它,直到用户按下Enter

指令

  • 输入解决方案

    1
    2
    read -rsp $'Press enter to continue...
    '
  • 转义解决方案(带有-d $' e')

    1
    2
    read -rsp $'Press escape to continue...
    '
    -d $'\e'
  • 任何关键解决方案(带有-n 1)

    1
    2
    3
    read -rsp $'Press any key to continue...
    '
    -n 1 key
    # echo $key
  • 具有预选选项的问题(带有-ei $'Y')

    1
    2
    read -rp $'Are you sure (Y/n) : ' -ei $'Y' key;
    # echo $key
  • 超时解决方案(带有-t 5)

    1
    2
    read -rsp $'Press any key or wait 5 seconds to continue...
    '
    -n 1 -t 5;
  • 睡眠增强别名

    1
    2
    read -rst 0.5; timeout=$?
    # echo $timeout

说明

-r指定原始模式,该模式不允许使用诸如""或" ^"之类的组合字符。

-s指定静默模式,并且因为我们不需要键盘输出。

-p $'prompt'指定提示,提示必须在$'和'之间,以允许空格和转义字符。注意,必须在单引号之间加上美元符号以使转义字符受益,否则可以使用简单的引号。

-d $' e'指定escappe作为分隔符,因此,作为当前输入的最后一个字符,可以放置任何字符,但请小心放置用户可以键入的字符。

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

-e指定读取行模式。

-i $'Y'在读取行模式下将Y指定为初始文本。

-t 5指定5秒的超时

如果您需要知道输入,则在-n1情况下使用按键服务。

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


这对我来说适用于多种版本的Linux,而其他一些解决方案则没有(包括此处最受欢迎的解决方案)。我认为它也更具可读性...

1
echo Press enter to continue; read dummy;

请注意,需要提供变量作为read的参数。


没有任何参数的read仅在您按Enter键时才会继续。
如果您按任意键,DOS pause命令将继续。如果需要此行为,请使用read –n1


read -n1不可移植。一种可移植的方法可以是:

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

除了使用read,只需按ENTER继续提示,您可以执行以下操作:

1
sed -n q </dev/tty

如果只需要暂停循环或脚本,并且很高兴按Enter键而不是任何键,那么read本身就可以完成任务。

1
2
3
do_stuff
read
do_more_stuff

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


此功能在bashzsh中均有效,并确保对终端的I / O:

1
2
3
4
5
6
7
8
9
# 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 '
'

}
export_function pause

把它放在您的.{ba,z}shrc中,以求正义!


尝试这个:

1
2
3
function pause(){
   read -p"$*"
}

是的,对于使用read-进行了一些调整,使其在cron和终端中最有用。

例:

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

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

在终端中,有2分钟的时间来查看rsync命令执行所需的时间。

然后,后面的echo是,因此后面的bash提示将出现在下一行。

否则,在终端中按Enter时,它将在" continue ..."之后直接在同一行上显示。


推荐阅读

    linux配置全局命令?

    linux配置全局命令?,工具,系统,名称,时间,工作,代码,地址,基础,变量,命令,lin

    linux操作命令网络?

    linux操作命令网络?,网络,工作,工具,系统,地址,状态,信息,命令,目录,服务,lin

    linux命令行自动提示?

    linux命令行自动提示?,地址,工作,系统,工具,信息,软件,状态,命令,百度,网络,

    linux命令检清空文件?

    linux命令检清空文件?,系统,不了,名称,环境,文件夹,命令,文件,目录,指令,终

    linux命令进入目录6?

    linux命令进入目录6?,系统,信息,工作,命令,目录,一致,名称,位置,情况,文件,li

    linux对命令重新命名?

    linux对命令重新命名?,位置,系统,文件,命令,文件名,目录,脚本,批量,方面,目

    linux命令不换行输出?

    linux命令不换行输出?,工作,地址,系统,情况,标准,命令,管理,网络,信息,目录,3

    linux命令行显示乱码?

    linux命令行显示乱码?,系统,情况,乱码,中文,字符集,服务器,原因,字符,日志,

    linux命令行与图形?

    linux命令行与图形?,系统,地址,数据,密码,工具,环境,地方,网络,电脑,平台,lin

    linux重命名命令是?

    linux重命名命令是?,名字,系统,软件,文件,命令,设计,文件名,蓝色,目录,方面,l

    linux的文件命令d?

    linux的文件命令d?,地址,情况,信息,工作,工具,命令,代码,文件,目录,控制台,Li

    linux访问域名命令?

    linux访问域名命令?,地址,信息,网络,系统,网址,电脑,网站,管理,数据,工具,lin

    linux识别新硬盘命令?

    linux识别新硬盘命令?,情况,系统,新增,服务,信息,硬盘,盘后,管理,单位,磁盘,L

    linux启动r语言命令?

    linux启动r语言命令?,数据,环境,官网,服务,系统,时间,电脑,统一,软件,语言,li

    linux对脚本命令响应?

    linux对脚本命令响应?,工作,代码,单位,系统,脚本,发行,命令,终端,提示符,目

    linux命令行粘贴命令?

    linux命令行粘贴命令?,系统,基本知识,命令,文件,源文件,环境,工作,名称,目

    linux进程家族树命令?

    linux进程家族树命令?,工作,系统,地址,状态,信息,管理,命令,目录,进程,软件,

    查询linux主机名命令?

    查询linux主机名命令?,系统,地址,工作,信息,网络,图片,名称,命令,电脑,标准,l

    linux输出结果命令?

    linux输出结果命令?,标准,工作,系统,信息,命令,文件,百度,数字,环境,设备,lin