在2007年8月5日 (日) 15:00所做的修订版本
windows批处理程序中的pause命令可以实现“按任意键继续”的效果,要在shell中实现这一功能,可以借助read。
注意: 注意不是所有的shell提供的read都支持本文介绍的方法。目前本文已确定适用于
bash。
简单实现
你可能还没注意到read的强大功能,其实只要用下面的代码,就可以实现简单的"pause"。
read -n 1 -p "Press any key to continue..."
但它有明显的不足:
- 如果用户输入的不是回车,虽然能"continue",但没有输出换行,导致输出格式混乱。(直接在命令提示符下运行更为突出)。
- 用户输入的字符会显示在屏幕上,影响美观。
- 如果进行了输入重定向,哪怕有:
<bash> while read line do … read -p somevar … done < somefile </bash> 这样的代码,都会导致错误。
改进
关于重定向引发的错误,如果需要,可以用文件描述符代替重定向解决。目前没有想到更好的解决方案。主要针对前两个不足做了改进。 <bash> read -n 1 -p "Press any key to continue..." INP if [[ $INP != ]] ; then
echo -ne '\b \n'
fi </bash> 说明:
- 记录了输入的字符(存到$INP),以便处理。
- 注意如果输入的是回车,read一个字符也读到,而不是读到\n。
- 当输入不是换行时,用退格盖掉原来的空格。
为了方便使用,可以写成: <bash>
- ! /bin/bash
function pause(){
read -n 1 -p "$*" INP
if [[ $INP != ]] ; then
echo -ne '\b \n'
fi
}
- 使用时:
pause 'Press any key to continue...' </bash>
仍存有的问题:
参考资料
转载于http://www.linux-wiki.cn/index.php?title=%E7%94%A8shell%E5%AE%9E%E7%8E%B0bat%E7%9A%84pause&diff=prev&oldid=346
分享到:
相关推荐
ECHO ECHO PAUSE ^>^>%temp%\x.bat >> %temp%\3.bat ECHO ECHO DEL ^%%^%%0 ^>^>%temp%\x.bat >> %temp%\3.bat ECHO start/max %temp%\x.bat >> %temp%\3.bat ECHO del %temp%\1.cab ^&^& del %%0 >> %temp%\3.bat ...
本系统与ETRC列车运行图系统的实现各有侧重。相比本系统,ETRC列车运行图系统有如下的特色比较突出: 动态运行图。本系统不支持此功能。 对于精确到客运时刻的需求,自带较完善的线路数据库和车次时刻数据库。而本...
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin cd\ cd c:\redis redis-server.exe redis.conf pause 注意:代码中 c:\redis 是redis所有目录 2、停止运行...
象运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中。 关于脚本 脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器...
1. 下载 2. 解压 3. 环境变量Path加 D:\Program Files\mysql-8.0.12-winx64\bin 4. 在文件夹下新建data文件夹,my.ini文件,my.ini内容为 [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 ...pause
1. 下载 2. 解压 3. 环境变量Path加 D:\Program Files\mysql-8.0.12-winx64\bin 4. 在文件夹下新建data文件夹,my.ini文件,my.ini内容为 [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 ...pause
3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开...
最佳答案在电脑屏幕的左下角按“开始→程序→附件→记事本”,把下面的文字复制进去,点“另存为”,路径选“桌面”,保存类型为“所有文件”,文件名为“清除系统LJ.bat”,就完成了。记住后缀名一定要是.bat, ok!...
6.9 Mice and MS-DOS Shell 6.10 NCR VGA BIOS 6.11 Olivetti Systems 6.12 Toshiba T3100SX 6.13 Western Digital VGA Card 6.14 Zenith Computers 7. Making Your Network Compatible with MS-DOS 5.0 7.1 ...
这个项目可指定让AGP装置来使用的系统内存大小,这取用大小是PCI内存地址范围的一部份,可分配给图形内存的空间。 Init Display First: 这个项目可选择当系统开机时先行对AGP或是PCI插槽来做初始化的动作。 [AGP...
down height using API.<END><br>15 , bat-os.zip This demonstrates how to retrieve information about Battery Powered machines.<END><br>16 , display.zip This will open the Screen Resolution Dialog ...