无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: chenall
打印 上一主题 下一主题

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

  [复制链接]
511#
 楼主| 发表于 2010-10-12 15:36:07 | 只看该作者
原帖由 tuxw 于 2010-10-12 14:59 发表
输出全放在 debug on状态不好,在命令行调试时非常不方便,每次都去改debug状态
还是在normal比较好,在菜单中执行时为了提高速度也不关心屏幕输出可以先debug off,再debugnormal
对于可能引起刷屏的命令for ...


也不是把输出全放在 debug on状态,只是把一些无关紧要的输出对普通用户隐藏而已。

像计算命令calc一般情况下最终使用者不需要去关心结果的显示。显示只是用于调试目的。
还有wenv get xxx一般情况下也只是用于判断是否存在,需要显示一般情况下也是用于调试目的。

不能为了调试方便而去显示那些对使用者来说没有多大作用的信息。

要进行调试还是要DEBUG ON比较方便。

[ 本帖最后由 chenall 于 2010-10-12 15:38 编辑 ]
回复

使用道具 举报

512#
发表于 2010-10-12 17:37:11 | 只看该作者
发觉FOR DO不支持字符"
如wenv set a="lsi_sas"
这样成立wenv (set a=${a#"} ; set a=${a%"})

[ 本帖最后由 zhaohj 于 2010-10-12 17:43 编辑 ]

Snap3.jpg (120.14 KB, 下载次数: 86)

Snap3.jpg
回复

使用道具 举报

513#
 楼主| 发表于 2010-10-12 17:57:33 | 只看该作者
原帖由 zhaohj 于 2010-10-12 17:37 发表
发觉FOR DO不支持字符"
如wenv set a="lsi_sas"
这样成立wenv (set a=${a#"} ; set a=${a%"})


"目前作为一个关键字使用。

我们可以像CMD那样加一个usebacke选项,把`当成"作为关键字来使用,这样就没有问题了。
回复

使用道具 举报

514#
 楼主| 发表于 2010-10-12 18:13:23 | 只看该作者
test3版本

1.bug修正。
2.for 添加usebackq选项,可以用`代替字符串操作的"
3.更新run命令为call
4.帮助信息修改。
回复

使用道具 举报

515#
发表于 2010-10-12 23:26:10 | 只看该作者
不知哪里错了
wenv for /f "usebackq delims==" %i in ( /grub/srsid/txt ) do (set a=%i ; set b=%j ; set a=$${a#$} ; set b=$${b#'} ; set b=$${b%'} ; echo $${a} $${b})

[ 本帖最后由 zhaohj 于 2010-10-12 23:27 编辑 ]

Snap1.jpg (62.13 KB, 下载次数: 81)

Snap1.jpg
回复

使用道具 举报

516#
发表于 2010-10-12 23:48:57 | 只看该作者
原帖由 chenall 于 2010-10-12 18:13 发表
test3版本
……
3.更新run命令为call
4.帮助信息修改。

帮助信息里run应更正为call吧?
回复

使用道具 举报

517#
发表于 2010-10-13 11:22:31 | 只看该作者
usebackq选项,可以用`代替字符串操作的"
不成功

Snap1.jpg (43.8 KB, 下载次数: 97)

Snap1.jpg
回复

使用道具 举报

518#
 楼主| 发表于 2010-10-13 14:36:37 | 只看该作者
@zhaohj
这个选项看来有歧义。

可能我根本就没有明白你前面几个贴子要表达的意思。。

新版本已经上传。(附带使用说明书)
支持多重变量嵌套。

另外读取内存字符串的功能还是改成了*ADDR$,这样比较直观。

接下来主要就是BUG修正,还有代码优化。

如果没有意外的话,应该很快就可以发布稳定版了。

差点忘了,也许还要添加一个字符串替换的功能。

[ 本帖最后由 chenall 于 2010-10-13 14:38 编辑 ]
回复

使用道具 举报

519#
发表于 2010-10-13 16:23:34 | 只看该作者
期待字符串替换的功能;期待正式稳定版的发布。^_^
回复

使用道具 举报

520#
发表于 2010-10-13 16:39:51 | 只看该作者
说明文件写得很详细。
usebackq选项看来我们理解有问题,发觉在WENV里没什么用处,使用不当反而会引起后遗症。
我的想法是:假如文件SRSID.TXT:
$PCI\VEN_1000&DEV_0050 = "lsi_sas"   
输入的时候可能后面有空格,如上面"lsi_sas"前后都有空格,不知道有几个空格,要把lsi_sas提取出来,很麻烦。因为“不能作为分隔符。
wenv for /f "delims==" %i in ( srsid.txt ) do (set a=%i ; set b=%j ; ...)

需要再设计一个字符串函数${var:@},目的是去掉字符串前后的空格。
回复

使用道具 举报

521#
 楼主| 发表于 2010-10-13 17:18:31 | 只看该作者
原帖由 zhaohj 于 2010-10-13 16:39 发表
说明文件写得很详细。
usebackq选项看来我们理解有问题,发觉在WENV里没什么用处,使用不当反而会引起后遗症。
我的想法是:假如文件SRSID.TXT:
$PCI\VEN_1000&DEV_0050 = "lsi_sas"   
输入的时候可能后 ...



试试刚上传的test5版。
在使用for时会去掉临时变量的左右空格。还有前后的引号""

去引号只会去掉左右各一个。

比如"abcd" 会得到abcd
""abcd"  得到"abcd

abcd"  得到abcd

另外考虑了一下字符串替换还是先不加了,以后也许会有更完善的方法,比较移稙一个sed之类的程序。

[ 本帖最后由 chenall 于 2010-10-13 17:20 编辑 ]
回复

使用道具 举报

522#
发表于 2010-10-13 17:28:08 | 只看该作者
空格和”都正确去掉,嗯,好多了。
$PCI\VEN_1000&DEV_0050 =  "lsi_sas"  
$PCI\VEN_1000&DEV_0056=  "lsi_sas"   
$PCI\VEN_1000&DEV_005A= "lsi_sas"
$PCI\VEN_1000&DEV_0062="lsi_sas"
$PCI\VEN_1000&DEV_0054="lsi_sas"
$PCI\VEN_1000&DEV_0058="lsi_sas"
$PCI\VEN_1000&DEV_005E="lsi_sas"

[ 本帖最后由 zhaohj 于 2010-10-13 17:30 编辑 ]

Snap1.jpg (51.67 KB, 下载次数: 89)

Snap1.jpg

Snap2.jpg (99.35 KB, 下载次数: 89)

Snap2.jpg
回复

使用道具 举报

523#
发表于 2010-10-13 23:36:26 | 只看该作者
使用说明中下面
        5)清除所有变量
        WENV reset
应为:
        5)清除所有变量
        WENV reset *

-----------------------------
不知C大什么时候考虑FAT命令增强?
1)支持文件的*匹配,如fat copy /intel/*  (fd0)/
                                  fat copy /intel/*.sy? (fd0)/
2)文本文件的编辑,删除行,增加行(>>)
3)...

[ 本帖最后由 zhaohj 于 2010-10-13 23:49 编辑 ]
回复

使用道具 举报

524#
发表于 2010-10-14 08:51:24 | 只看该作者
wenv reset * 也不行,只能清除一个。


[ 本帖最后由 zxw 于 2010-10-14 08:54 编辑 ]
回复

使用道具 举报

525#
发表于 2010-10-14 09:14:40 | 只看该作者
嗯,多出一个bug
wenv reset a*    不会清除a变量,但会清除a1、a2等变量
wenv reset *     只会清除最后一个设置的变量

Snap1.jpg (27.37 KB, 下载次数: 83)

Snap1.jpg
回复

使用道具 举报

526#
 楼主| 发表于 2010-10-14 09:50:42 | 只看该作者
嗯,上面的问题会在今天的版本进行修正。

@zhaohj
关于fat其实之前我也考虑过*的问题。但是这个*只能用于来源和目的都是FAT分区的情况下。
所以后来就没有考虑这个了。

而且对于PXE是没有文件列表功能的,也是不太可能。
回复

使用道具 举报

527#
发表于 2010-10-14 09:54:15 | 只看该作者
for /f "delims=分隔符集" ...是否有问题?

wenv for "delims=#" %i in ("my#name#is#zhao") do %i

Snap2.jpg (30.35 KB, 下载次数: 84)

Snap2.jpg
回复

使用道具 举报

528#
 楼主| 发表于 2010-10-14 10:13:50 | 只看该作者
原帖由 zhaohj 于 2010-10-14 09:54 发表
for /f "delims=分隔符集" ...是否有问题?

wenv for "delims=#" %i in ("my#name#is#zhao") do %i


这个是正常的,记得我说明书上有例子。

默认也就是cmd里面的tokens=1*

下一个变量用于存放剩余的字符。
回复

使用道具 举报

529#
发表于 2010-10-14 10:29:19 | 只看该作者
嗯,是对的,默认tokens=1*,使用下面就看明白了。

[ 本帖最后由 zhaohj 于 2010-10-14 10:33 编辑 ]

Snap1.jpg (29.03 KB, 下载次数: 69)

Snap1.jpg
回复

使用道具 举报

530#
发表于 2010-10-14 10:49:51 | 只看该作者
*只能用于来源和目的都是FAT分区,实际上有这个功能也是不错的。
现在的FAT版本没有目录下所有文件到目的地功能,比如一些驱动包含DLL,但无法知道是什么文件名。
来源是FAT,我们只要自己虚拟一个就可以了。

fat dir也是显示来源是FAT分区的。

[ 本帖最后由 zhaohj 于 2010-10-14 11:38 编辑 ]
回复

使用道具 举报

531#
发表于 2010-10-14 23:23:18 | 只看该作者
test6已测试,ok!
reset说明上没有,不过WENV帮助上有,最好说明上补一下。
回复

使用道具 举报

532#
发表于 2010-10-14 23:50:00 | 只看该作者
@chenall
找到grubutils不能编译的原因, font.h 里 include "typedef.h",这个包含文件的名字是有大小写的 TypeDef.h,所以总是报BYT,DWORD这些定义的类型错误,我将名字改为小写后编译正常了,很奇怪你那里怎么能编译成功?是不是gcc环境可以设置的?
回复

使用道具 举报

533#
发表于 2010-10-15 01:23:19 | 只看该作者
@chenall

C大  变量嵌套是不是有点问题

wenv  set path=/boot/imgs.img/dts.ima.gz
wenv echo ${${path##/}#.}

结果应该是ima.gz  但显示的是${dts.ima.gz#.}  不知是哪里错了
回复

使用道具 举报

534#
发表于 2010-10-15 01:38:19 | 只看该作者
嵌套不是这样用的
${path##/} 的结果必须是一个变量名
才可以再次 ${${path##/}#.}

你的这个用法不是嵌套,而是字符串二次截取,但目前没有这样的语法。
因为 ${VAR##string} 截取符#前面必须是一个变量名。你的用法第一次截取后它是一个字符串,不是变量名了。
要实现二次截取需要这样基本语法:${VAR}#string,即 string#string。这个实现比较容易,但 chenall 的设计目标是和linux shell 语法保持兼容。chenall可以考虑增加一个截取命令实现 string#string,这样从路径中取文件名比较方便,只需一条语句。

嵌套的用法
set abc=def
set def=1234
则 ${${abc}} 的结果应该是1234,嵌套就象个指针一样。这个目前对大多数人来说用处不大,但这个功能可以实现动态变量,在用wenv编写一些集成化功能时可以用到。

也可以实现动态截取
set a=123456789
set s=2
set l=5
echo ${a:${s}:${l}} 这个用法目前是支持的

[ 本帖最后由 tuxw 于 2010-10-15 01:54 编辑 ]
回复

使用道具 举报

535#
发表于 2010-10-15 08:49:30 | 只看该作者
那对说明中
   6: 支持嵌套变量。
   像下面的例子:
    wenv echo ${${${a:0:1}:0:1}}
产生疑问,目前还是不支持的。
回复

使用道具 举报

536#
发表于 2010-10-15 09:10:43 | 只看该作者

回复 #534 tuxw 的帖子

谢谢  那看来想二次截取只能再设置一个变量了
回复

使用道具 举报

537#
 楼主| 发表于 2010-10-15 09:39:09 | 只看该作者
原帖由 zhaohj 于 2010-10-15 08:49 发表
那对说明中
   6: 支持嵌套变量。
   像下面的例子:
    wenv echo ${${${a:0:1}:0:1}}
产生疑问,目前还是不支持的。


看来,这个还是很容易引起歧意啊。我需要修改成一个比较易懂的例子.

这要看你设置的变量是什么了。比如你的变量
wenv set a=abcd

得到的结果是a。

因为这个是三层套的嵌套。第一次解开后是a,a是变量,再次解开还是a.
回复

使用道具 举报

538#
发表于 2010-10-15 10:14:07 | 只看该作者
字符串的比较中:check string1 compare-op string2
如果是两个字符串:bcd   abcd,比较符>=、 <=是根据什么来判别的?
-------------
实际使用中,字符串比较需集合的判断(-,即属于,如bcd属于aaaabcdeeee的子集。

测试了一下,bcd>=abcd,不理解,感觉从左边第一个字符开始比较ASCII码大小。这样A<=a,AA<=a

[ 本帖最后由 zhaohj 于 2010-10-15 10:38 编辑 ]
回复

使用道具 举报

539#
 楼主| 发表于 2010-10-15 10:31:25 | 只看该作者
原帖由 zhaohj 于 2010-10-15 10:14 发表
字符串的比较中:check string1 compare-op string2
如果是两个字符串:bcd   abcd,比较符>=、  


字符串比较,只比较同一位置上的字符,A比就大就是A大,否则就是B大。

字符串比较一般情况下都是用==

只是为了编程方便,所以就全部支持了。字符串比较的其它情况比较少用。

像bcd >= abcd

这是真,因为b>a
回复

使用道具 举报

540#
 楼主| 发表于 2010-10-15 10:34:13 | 只看该作者
另外,看起来目前的版本没有什么现什么问题了。

再放两天,如果还是没有发现问题。下周一就发布正式稳定版。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 09:44

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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