无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
无忧启动论坛唯一网址:bbs.wuyou.net系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
楼主: zhaohj

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
发表于 2010-11-7 16:45:49 | 显示全部楼层
@zhaohj
还有个隐患,你自己修改下
在第一次使用 rd 前,先将它清0

WENV reset =${_ini_buf} ${_ini_cnt} #或只清前面17字节也是可以的
WENV check ${_ini_cnt}>=1 call cat --skip=${_ini_tmp} --locate=[ ${_ini_fn} > (rd)+1

输出重定向到 rd  后,在第18个字节处截断。启动后初次运行可能没问题,但临时缓冲区可能被其它命令用过(比如read)初值不为0,它可能含有一些其它字符,如果我们的搜索命令输出只有3个字节,那4-17间的字符可能造成干扰,先清下0就没问题了。

之所以在18个字节处截断,是因为最大可能的偏移值64位,16进制结果要占16个字符,加前面的空格是17个字符。这样保证第一个偏移值不被截断。实际上在 18-512间截断都可以,但截断处前面的部分要先清0。

[ 本帖最后由 tuxw 于 2010-11-7 16:49 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-7 18:11:10 | 显示全部楼层
cat --locate=字符串不能超过16个,>16个字符就出错。

要让C大查一下了。

不然要先判断这个变量的长度,超过往前截断。

WENV check " "<-"${_ini_sc}" (set -t _ini_buf=$${_ini_sc#]} ; set _ini_sc=$${_ini_sc%% })
:目前cat最多只能匹配16个字符
WENV check ${_ini_sc,?}>=17 set _ini_sc=${_ini_sc:-16}
这样就正常了。

如果scsi.后面8个字符,这样    x.scsi.12345678]
                                 位数  1                   16
这样就很不保险。还不如把最后的]去掉,从倒数17开始取16位
WENV check ${_ini_sc,?}>=17 set _ini_sc=${_ini_sc:-17:16}

-------------
看下面:
      [HardwareIds.scsi.SIL3X12R]
                  [Files.scsi.SIL3X12R]
取倒数16个字符  s.scsi.SIL3X12R]
正好重叠,这样唯一性很难保证
另,cat区分大小写也是一个问题

[ 本帖最后由 zhaohj 于 2010-11-7 19:05 编辑 ]
Snap1.jpg
回复

使用道具 举报

发表于 2010-11-7 19:26:55 | 显示全部楼层
不要这么复杂,设置 INIFILE 时只给16个字符就行了,这样通用性会好一点。批处理内部参数分离部分改一下就可以了

===============
改动量比较小的方法
wenv call cat --locate=${_ini_sc:0:16} ...
只取段名的前16字符进行查找,其它地方不用动,也用判断段名是否超出16字符。
改动_ini_sc的话计算偏移,起始,字节数部分都要相应改变。

[ 本帖最后由 tuxw 于 2010-11-7 20:01 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-7 21:05:12 | 显示全部楼层
[HardwareIds.scsi.SIL3X12R]
id="PCI\VEN_1095&DEV_3112&CC_0104","Si3112r"
id="PCI\VEN_1095&DEV_3512&CC_0104","Si3112r"
[HardwareIds.scsi.SIL3X12S]
id="PCI\VEN_1095&DEV_3112&CC_0180","Si3112"
id="PCI\VEN_1095&DEV_3512&CC_0180","Si3112"
[HardwareIds.scsi.MSASXP]
id="PCI\VEN_1000&DEV_0060&SUBSYS_10001458","MSASXP"
[HardwareIds.scsi.SYMMPI]
id="PCI\VEN_1000&DEV_0622","SYMMPI"
id="PCI\VEN_1000&DEV_0624","SYMMPI"
-----------------
取前16个字符能行吗?
回复

使用道具 举报

发表于 2010-11-7 21:42:09 | 显示全部楼层
这种情况没有完美的办法,如果你取后面或中间的,同样存在这个2个长段名局部相同的问题

取前16字符查找只是在应对 cat 的 16 字节限制这一问题的最简洁的方法

===============
复杂一点的有效的办法

WENV call cat --locate=${_ini_sc:0:16} ${_ini_fn}
先查找16字节
通过 ?_WENV 判断是否找到多个
如找到一个,则就是目标
否则再从多个偏处开始查找 ${_ini_sc:16:16}
继续判断

总之,办法总是比困难多

[ 本帖最后由 tuxw 于 2010-11-7 21:52 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-7 22:43:37 | 显示全部楼层
先看看C大怎么说,为何cat是16个,方便的话能否修改,并适当增加功能。
如16进制的输出,字符串大小写区分,字符串长度限制。
回复

使用道具 举报

发表于 2010-11-7 22:54:23 | 显示全部楼层
cat 比较16个字符,太长了会降低效率。一次读取16个字符进入缓冲后后再进行比较。

另外--locate-align=A是指对齐参数。

即如果你确定你要查找的内容的位置正好是A的倍数则使用这个参数可以加快查找。

比如A=16时。
只会从0X0,0X10,0X20等开始的位置进行查找。
回复

使用道具 举报

发表于 2010-11-8 00:09:16 | 显示全部楼层
上传了一个 WENV,加了个 find 命令
WENV find [-skip=S] [-len=L] [-c] STRING FILE

G2.rar (719 Bytes, 下载次数: 110)
回复

使用道具 举报

 楼主| 发表于 2010-11-8 16:55:34 | 显示全部楼层
现在对wenv switch有点模糊了,最好加个help,时间一长容易忘记。
如:WENV switch -h
       出现帮助信息
---------------------
我记得wenv for 默认会取消前后引号,测试也正常
现在switch是111111,6位,怎样保持前后引号输出?

------------------
知道了,???0

        位号:1  2  3  4  5  6
                 ?   ?  ?  ?  ?  ?
        默认  1  1  1  1  1  1
                |   |  |   |  |   |____  NOT_TRUNC, 为0时命令行超出512字节部分截断,并自动设置为1
                |   |  |   |  |
                |   |  |   |  |______  转义符 \ 当普通字符输出
                |   |  |   |
                |   |  |   |________  操作变量时去掉前后引号(不影响check)
                |   |  |
                |   |  |__________  数值转字符串时用10进制
                |   |
                |   |____________  数值计算结果取64位
                |
                |______________  ECHO自动自动换行

[ 本帖最后由 zhaohj 于 2010-11-8 18:02 编辑 ]
回复

使用道具 举报

发表于 2010-11-8 20:37:41 | 显示全部楼层
现在这些开关还是测试性质的,有些开关可能以后不会保留,或许顺序可能会变动(将可能用到频率较高的排在前面,修改方便也容易记忆),要等稳定后再统一说明。我现在最想改的是将开关定义反过来,只有打开某个开关,才触发默认行为相反的功能。这也是一直没提供 switch echo_ln=on 这种直观语法的原因之一,实现这个语法后再变动时会麻烦很多。现在这种简单想变动只需要调一下几个语句的行序,0,1互换就可以了。

[ 本帖最后由 tuxw 于 2010-11-8 20:39 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2019-9-21 15:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表