无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chenall
打印 上一主题 下一主题

grub4dos 外部命令 wenv [2010-10-17 ]

  [复制链接]
721#
 楼主| 发表于 2010-11-7 00:35:38 | 只看该作者
WENV 的read命令还是有许多好处的,最明显的好处就是提升运行的速度。

可以把需要WENV处理的命令放在一起,用WENV 的read来调用,执行时只读取一次WENV命令,否则每执行一次WENV都要读取一次WENV,特别是当WENV文件在放PXE上面是速度那叫一个慢。
回复

使用道具 举报

722#
发表于 2010-11-7 00:44:03 | 只看该作者
一般也就测试的时候,会把外部命令放在PXE上。
再放出一个测试版吧,今天就是这个cat,原来一直怀疑批处理有问题,运行终止。
批处理运行一点都不能含糊。
回复

使用道具 举报

723#
发表于 2010-11-7 01:03:08 | 只看该作者
我觉得批处理还是有问题的
在正常批处理中插入一句返回0的语句不正常

在一个可正常执行的批处理中插入下面三句

WENV echo here 1
calc 0 && echo here ?
WENV echo here 2

here 2 不会输出,到这里就停止了
回复

使用道具 举报

724#
发表于 2010-11-7 01:04:01 | 只看该作者
原帖由 chenall 于 2010-11-7 00:35 发表
WENV 的read命令还是有许多好处的,最明显的好处就是提升运行的速度。

可以把需要WENV处理的命令放在一起,用WENV 的read来调用,执行时只读取一次WENV命令,否则每执行一次WENV都要读取一次WENV,特别是当W ...


这个我倒没想到,看来read还是有存在价值的
回复

使用道具 举报

725#
 楼主| 发表于 2010-11-7 01:09:18 | 只看该作者
原帖由 tuxw 于 2010-11-7 01:03 发表
我觉得批处理还是有问题的
在正常批处理中插入一句返回0的语句不正常

在一个可正常执行的批处理中插入下面三句

WENV echo here 1
calc 0 && echo here ?
WENV echo here 2

here 2 不会输出,到这里 ...


因为目前GRUB4DOS批处理碰到返回值是0就退出。这个可以改成碰到错误(error值非0)退出。。
回复

使用道具 举报

726#
 楼主| 发表于 2010-11-7 01:14:33 | 只看该作者
上传了一个新的grub4dos测试版,看看还有没有什么问题。
回复

使用道具 举报

727#
发表于 2010-11-7 01:20:16 | 只看该作者
已测试,批处理和cat命令正常
辛苦了,休息吧,晚安
回复

使用道具 举报

728#
发表于 2010-11-8 00:00:25 | 只看该作者
1.GET VAR 如变量不存在时的提示信息放到debug on状态
2.修复数字9不能用在变量名中
3.添加第6个开关 NOT_TRUNC, 为0时命令行超出512字节部分截断,一次性,开关自动回复为 1
  只是简单的将命令行截短
4.增加 find 命令: WENV find [-skip=S] [-len=L] [-c] STRING FILE
  -c 大小写敏感
  FILE 最大1M
  如找到,设置 ?_WENV 为第一次找到的偏移量
  比较边缘的功能,就不在 help 中说明了

[ 本帖最后由 tuxw 于 2010-11-8 00:38 编辑 ]

wenv-tuxw-2010-11-08.zip

40.5 KB, 下载次数: 23, 下载积分: 无忧币 -2

回复

使用道具 举报

729#
发表于 2010-11-8 08:36:58 | 只看该作者
真是太好了,感谢tuxw!
回复

使用道具 举报

730#
发表于 2010-11-8 10:15:40 | 只看该作者
-skip 参数跟 cat 命令中的 --skip 有点区别

skip=0 时,从0位置开始查找
skip>0 时,从skip+1开始查找

这个特性在连续查找时不需要对偏移量做增1处理,可以直接用上次查找的结果作为下次查找的偏移量

如 cat --locate=[ /TXTSETUP.OEM 的输出结果
12 1BA 1C6 ....


WENV find [ /TXTSETUP.OEM && WENV set a=${?_WENV}
输出
0x12

直接用上次的查找结果a作偏移量
WENV find -skip=${a} [ /TXTSETUP.OEM 输出
0x1BA
回复

使用道具 举报

731#
发表于 2010-11-8 16:47:54 | 只看该作者
建议变量嵌套增加支持诸如:
${${VAR##STRING}%%STRING1}
回复

使用道具 举报

732#
 楼主| 发表于 2010-11-8 17:08:13 | 只看该作者
原帖由 zxw 于 2010-11-8 16:47 发表
建议变量嵌套增加支持诸如:
${${VAR##STRING}%%STRING1}


很早的版本就已经支持了,看来你也是不看说明书的。。。
回复

使用道具 举报

733#
发表于 2010-11-8 17:21:55 | 只看该作者
@CHENALL大:
反复看了说明书,也反复测试了几次,
目前变量只支持${VAR:X:Y}类的嵌套啊。
对${VAR#STRING}类的嵌套尚未支持啊?
回复

使用道具 举报

734#
 楼主| 发表于 2010-11-8 17:29:15 | 只看该作者
自己看图吧。

也许是你所表达的意思根本不是这样的。但是变量嵌套肯定是支持的。

20101108172829613.png (5.11 KB, 下载次数: 61)

20101108172829613.png
回复

使用道具 举报

735#
发表于 2010-11-8 17:51:03 | 只看该作者
我也上图,tuxw的最新版本,chenall大的最新版本(2010.11.1)都一样。
回复

使用道具 举报

736#
发表于 2010-11-8 17:52:07 | 只看该作者
@zxw:
看来你还是不理解,你变量d没设置啊。
${a##,}得到d
再${d%%,},这里d是变量
-------------
变量嵌套还是不要乱用。
回复

使用道具 举报

737#
发表于 2010-11-8 17:53:39 | 只看该作者

回复 #737 zhaohj 的帖子

不好意思,明白了。汗!
读书不认真,该打!!

[ 本帖最后由 zxw 于 2010-11-8 17:55 编辑 ]
回复

使用道具 举报

738#
发表于 2010-11-8 20:05:47 | 只看该作者
这个问题之前有讨论过,大家对嵌套的理解错误。对嵌套的误解比较大的可能是源于 STRING##STRING这样的需求,这个不是嵌套,却是个很直观很方便的需求,它可以很方便的实现多级截取STRING##STRING%%STRING:2:5。但目前不能提供WENV STRING##STRING这样的语法。这样会加大子命令判断的复杂程度,即使花时间实现,也会给以后扩展带来麻烦。一旦选定的某种语法规则,就给应用加上了一定的限制,比如选定了${为变量标识符,这两个字符作普通字符就受限,还有引号的问题,只是这些特例大家还没有用到。

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

使用道具 举报

739#
发表于 2010-11-8 20:20:54 | 只看该作者
也许可以采取一种折中的方式
${VAR#string}
当VAR不是有效的变量名,或没有设置这个变量,则将“VAR”当作串来截取,这样就可以实现
${${VAR#string}#string}
这个实现不难,但要评估下对现有的语法有多大影响。
比如对一个由用户输入的未知串进行截取,本意是通过连续的两次截取得到中间某部分,但内部第一次截取后,恰好是一个已有的变量,外部的二次截取怎么取舍?
回复

使用道具 举报

740#
发表于 2010-11-9 02:20:35 | 只看该作者
1.find 命令增加 -end, -r 两个参数

2.switch 增加直观语法
    WENV switch ECHO_FMT=on   # echo 支持转义符输出
    WENV switch ECHO_FMT=     # 关闭
    WENV switch 获取当前状态

3.switch 开关反义,调整顺序,  默认状态0
    支持直观语法后,开关顺序不重要了,但对此前用状态排列改变开关的菜单有影响



[ 本帖最后由 tuxw 于 2010-11-9 02:45 编辑 ]

wenv-tuxw-2010-11-09.zip

41.64 KB, 下载次数: 20, 下载积分: 无忧币 -2

回复

使用道具 举报

741#
发表于 2010-11-9 10:11:12 | 只看该作者
KEEP_QUOTE  :在FOR命令中字符串操作默认去掉前后引号

应该说,只在FOR命令中适用。
回复

使用道具 举报

742#
 楼主| 发表于 2010-11-9 10:39:41 | 只看该作者
@zhaohj
你可以把SRSF6的处理流程贴出来,
我再抽空看看能不能直接转为程序来直接处理,tuxw也可以帮忙看看。

我认为最终理想效果就是两个命令搞定SRS。
srsf6 /SRSID.TXT //根据SRSID自动处理需要的所有操作,并生成GRUB4DOS命令脚本在rd中。
(rd)+1
回复

使用道具 举报

743#
发表于 2010-11-9 10:39:54 | 只看该作者
嗯,昨晚临时改的readme,没细斟酌,再逐步完善吧,我还在考虑扩展这个开关的适用范围

引号的处理目前并不完善,比如一个变量中间含有引号时,check命令不能正常工作,语法规则的定义还有待改进

=======================

现在这些措施都是零碎的手段,今天可能有用,明天可能就用不上了。还是按C大的说法,看能不能先确定一个标准的SRS处理流程,尽可能考虑到适用范围,然后实现一个专用的外部命令

[ 本帖最后由 tuxw 于 2010-11-9 10:50 编辑 ]
回复

使用道具 举报

744#
发表于 2010-11-9 11:15:02 | 只看该作者
我把SRSF6已经处理得差不多了,等我处理完毕,大家看看有什么需要改进的。
OEM驱动有可能含有多级路径,N版是一级路径,如:
[Disks]
itl="AHCI&RAID DRIVER",\DIY,\INTEL
nv="AHCI&RAID DRIVER",\DIY,\NV

\INTEL一级路径比较好处理,多级路径如\INTEL\x86\winxp处理比较复杂,因为要把\全换成/
当然要实现它也不难,最理想有个字符串操作的替换${var@string1@string2},即把string1替换成string2

这个在实际应用当中碰到还是很多的。
回复

使用道具 举报

745#
发表于 2010-11-9 11:48:48 | 只看该作者
${VAR!string1=string2},这个已经有了,只是未公开说明,子串现在不支持转义符
如果 string2 为空,则是删除子中 string1
回复

使用道具 举报

746#
发表于 2010-11-9 12:35:24 | 只看该作者
原帖由 tuxw 于 2010-11-9 11:48 发表
${VAR!string1=string2},这个已经有了,只是未公开说明,子串现在不支持转义符
如果 string2 为空,则是删除子中 string1


可惜不支持转义符
回复

使用道具 举报

747#
发表于 2010-11-9 13:18:39 | 只看该作者
可以考虑将 ECHO_FMT 开关扩展到这里来
但替换\为/不需要支持转义呀

WENV set a=abc\def
WENV echo ${a!\=/}

可通过变量中转支持转义符,比如下面这样可以删掉 a 中所有换行
WENV echo -e abc\ndef\n123 | WENV set a=
WENV echo -e -n \n | WENV set b=      #得到一个换行符
WENV echo ${a!${b}=}

[ 本帖最后由 tuxw 于 2010-11-9 13:46 编辑 ]
回复

使用道具 举报

748#
发表于 2010-11-9 23:51:35 | 只看该作者
感觉还有bug
文件outfile:(就一行测试),目的取1,4个元素
d1 = "LSI Fusion-MPT SAS Storport Driver",\lsi_sas.tag,\
----------
wenv set disk=d1
wenv for /f "tokens=1,4 delims==," %i in ( (fd1)/OUTFILE ) do (set a=%i ; set b=%j ; check $${a}==$${disk} break)

这个版本好像loop、break有问题

[ 本帖最后由 zhaohj 于 2010-11-9 23:57 编辑 ]

Snap1.jpg (5.92 KB, 下载次数: 48)

Snap1.jpg
回复

使用道具 举报

749#
发表于 2010-11-10 00:17:46 | 只看该作者
继续测试, set b=%j   ; check $${a}==$${disk} break
在set b=%j后打入两个空格,问题消失。
说明是隐藏的bug
回复

使用道具 举报

750#
发表于 2010-11-10 00:54:10 | 只看该作者
另:echo或wenv echo也发现一个bug,明天上午发图,也是加空格后问题消失。
估计是同一问题。
SRSF6全测试通过,也算是对WENV命令的充分实践,明天发布新的测试版。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-1 15:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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