无忧启动论坛

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

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

  [复制链接]
661#
发表于 2010-11-2 11:21:27 | 只看该作者
原帖由 zhaohj 于 2010-11-2 10:34 发表


是转义符的问题,这个版本还是存在同样问题。


这个要用引号引括起来

原帖由 zxw 于 2010-11-2 10:38 发表
wenv check 还是有点问题:
103711

转义符后多加空格后正常,应该是个隐藏比较深的BUG。

原帖由 zhaohj 于 2010-11-2 10:46 发表
哇,这样也行wenv check ${a:0:4}==${b} && echo ok
这个应该语法错误。

check命令以前是没有check关键字的,标准用法就是在后面用 && 或 || 接命令。这个用保留是应该保留的。

因为大小比较目前都是带等于的,下面的用法没用
WENV check ${a}<${b} WENV command
只能这样代替
WENV check ${a}>=${b} || command
回复

使用道具 举报

662#
发表于 2010-11-2 11:23:09 | 只看该作者
原帖由 zxw 于 2010-11-2 11:16 发表
测试了一下,确实如此,&& 后是grldr内部命令


是grldr支持的所有命令,也可以是外部命令
回复

使用道具 举报

663#
发表于 2010-11-2 11:55:13 | 只看该作者
@tuxw:
wenv echo的转义符输出,能不能改成C大的一样。现在默认是不输出\字符的。
回复

使用道具 举报

664#
发表于 2010-11-2 12:05:07 | 只看该作者
我试一下......

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

修复字符串最后一个字符是 \ 时比较出错的BUG
echo 命令保持与chenall版本兼容,增加 -e, -n 参数
增加第5个开关 ECHO_NOT_FMT,默认不支持转义符

-e -n 优先级高于开关状态,但只针对当前命令有效,开关是针对此后所有命令有效

跟chenall版本有点区别的地方是 WENV echo -e -n string 参数间有且只有一个空格(原版是可以有多个空格的),这样我们可以实现缩进输出
WENV echo -e  abc\n
WENV echo -e      abc\n
上面两条命令是不一样的

wenv-tuxw-2010-11-02.zip (36.94 KB, 下载次数: 17)

另外有个功能只是自己用而增加的作为彩蛋没有公开,但想到可能写“程式菜单”的朋友比较有用,简单说一下
WENV reset =start length (reset 和 = 间有个空格)
作用是将 start开始的length个字节清零,用于内存初始化比较方便,如
WENV reset =0x60000 0x200 清零一个扇区
WENV reset =0x60000 32k


@chenall
字符串最后一个字符是 \ 出错的问题,是Grub4Dos的一个隐藏BUG。函数 skip_to(0, "string echo ok") 当string 最后一个字符是 \ 时,它返回的指针不是echo而是ok,当在echo前面增加一个空格则正常。
我没有研究过这个内部函数,暂时用一段额外的代码实现这个函数的功能,这样代码比较冗余。你帮忙检查一下skip_to,最好从源头上解决。而且很可能其它引用此函数的地方也存在问题只是现在没有被发现。

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

使用道具 举报

665#
发表于 2010-11-2 14:21:16 | 只看该作者
对于我来说(新手),我是非常想学习这些命令的,毕竟将来自己电脑坏了,或者由于工作需要,自己也
能使用一些简单的命令,解决一些燃眉之急。但是由于我的英语水平实在有限,学起来实在麻烦!很多东
西,不是不理解,是记不住单词。时间久了,学起来慢,然后就导致不想学了。
建议:尽量多的使用拼音,方便中国用户,方便初级“玩家”。我刚看到这个命令中有使用的内置变量,我想
这些东西,跟命令本身影响不大,只是一些命名,那干脆用拼音命名好了,如果太长,可以缩写。用拼音
命名的例子,我已经见过很多了,例如一些网站就是这样的。而且兼容也没有问题啊,和英语的差别不是
很大啊?       我见论坛说,想用grub4dos建立中国自己的系统,那我觉得,首先你要让中国人学起来
容易些吧???总不能,我们想了解自己的系统时,还要先熟悉英语吧?   
     命令,想要在中国推广,实用性当然重要!但是有中国人的特色也是必须的啊!比如奥运会,世博
主场馆都是很有中国风的,也很受欢迎啊!
回复

使用道具 举报

666#
发表于 2010-11-2 15:04:07 | 只看该作者
现在改变的地方比较多,我补充了一下说明,希望tuxw进一步完善。

[ 本帖最后由 zhaohj 于 2010-11-2 15:05 编辑 ]

wenv-readme.rar

5.49 KB, 下载次数: 38, 下载积分: 无忧币 -2

回复

使用道具 举报

667#
 楼主| 发表于 2010-11-2 15:07:29 | 只看该作者
@tuxw,zhaohj
字符串最后一个字符是 \ 出错的问题,其实这也不能算BUG.
因为skip碰到字符"\"就跳过下一个字符的检测.

解决办法很简单,对于字符串比较,你可以在字符串前后加引号或其它字符(这也是一个保险作法)
因为你在使用变量的时候有可能这个变量不存在,像
wenv check ${a:0:4}==${b}
只要其中一个变量不存在都将出错

保险的作法是添加符号,比如改成以下的就不用担心了.
wenv check #${a:0:4}#==#${b}#

这些在写批处理的时候经常会碰到的.
回复

使用道具 举报

668#
发表于 2010-11-3 01:08:14 | 只看该作者
想支持N版的F6驱动包,感觉目前无法实现,还是缺少象INIFILE获取类的功能。
比如:
[HardwareIds.scsi.lsi]
id="PCI\VEN_1000&DEV_0028","SYMMPI"
id="PCI\VEN_1000&DEV_0029","SYMMPI"
id="PCI\VEN_1000&DEV_0030","SYMMPI"
[HardwareIds.scsi.ias]
id="PCI\VEN_1000&DEV_0028","iastor"
id="PCI\VEN_1000&DEV_0029","iastor"
id="PCI\VEN_1000&DEV_0030","iastor"

通过chkpci可以知道id在上面那个类,但无法获取如[HardwareIds.scsi.ias]的类别信息。
回复

使用道具 举报

669#
发表于 2010-11-3 10:23:06 | 只看该作者
好想实现locate=string的功能,如:
[Disks]
vmw="AHCI&RAID DRIVER",\DIY,\VMW
itl="AHCI&RAID DRIVER",\DIY,\INTEL
nv="AHCI&RAID DRIVER",\DIY,\NV
ati="AHCI&RAID DRIVER",\DIY,\ATI
sil="AHCI&RAID DRIVER",\DIY,\SIL
via="AHCI&RAID DRIVER",\DIY,\VIA
sis="AHCI&RAID DRIVER",\DIY,\SIS
uli="AHCI&RAID DRIVER",\DIY,\ULI
ite="AHCI&RAID DRIVER",\DIY,\ITE
jmb="AHCI&RAID DRIVER",\DIY,\JMB
msas="AHCI&RAID DRIVER",\DIY,\MSASXP
sym="AHCI&RAID DRIVER",\DIY,\SYMMPI
[Defaults]
...
locate=[Disks]成功,指针指向下一行(如果存在,不存在就退出),严格讲应该是offset=string,偏移到第一个查到这个匹配的字段,从下一行开始。
这样如果能实现,inifile的功能基本上能代替了。

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

使用道具 举报

670#
发表于 2010-11-3 12:28:00 | 只看该作者
可不可以这样代替?
cat --locate=[Disks] file | WENV set offset=
WENV get offset && WENV calc offset=${offset}+7

===========================
cat --locate=[Disks] file | WENV set a=0x
WENV set a=${a!  =}  #删除前面的2个空格,用到一个彩蛋功能(子串替换)
WENV set a=${a%% } #删除第一个空格后面的字符,如果locate找到多项时将偏移量定在第一个找到的位置


cat --locate=[Disks] file | WENV set a=
WENV set a=0x${a}
WENV set a=${%% }

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

使用道具 举报

671#
发表于 2010-11-3 13:16:10 | 只看该作者
这个cat命令计算偏移发觉有问题
回复

使用道具 举报

672#
 楼主| 发表于 2010-11-3 15:28:51 | 只看该作者
如果可能的话,我觉得专门写一个命令来处理SRS_S6驱动,或许会更好.配合GRUB4DOS的批处理功能.应该不难实现.
回复

使用道具 举报

673#
发表于 2010-11-3 17:32:29 | 只看该作者
原帖由 chenall 于 2010-11-3 15:28 发表
如果可能的话,我觉得专门写一个命令来处理SRS_S6驱动,或许会更好.配合GRUB4DOS的批处理功能.应该不难实现.


现在的难点在N版的F6驱动包。
回复

使用道具 举报

674#
发表于 2010-11-3 18:09:53 | 只看该作者
readme更新
1.check命令中引号完全当特殊字符,比较时不包含引号
    WENV check "abc"==abc echo ok 返回真
2.check命令增加 <- 操作符(数学符号∈包含于),用于查找子串
    WENV check " "<-${a} echo ok  #在变量a中查找空格
    可用于提取子串之前的判断,比如
    WENV set a=${a#.},如果 . 不存在,会删除变量a
    WENV check "."<-${a} set a=${a#.}
3.calc 命令增加 -hex, -x32 参数,参数优先级高于状态开关
    地址计算时保持16进制形式
    WENV set addr=0x60000
    WENV calc -hex addr=addr+4 #addr仍保持16进制形式
    WENV calc -hex a=a #a转换为16进制

wenv-tuxw-2010-11-03.zip (38.17 KB, 下载次数: 40)
回复

使用道具 举报

675#
发表于 2010-11-3 23:00:49 | 只看该作者
新版WENV应用例子

获取指定硬盘的活动分区与最后分区: GP.BAT.rar (318 Bytes, 下载次数: 60)

太简单了,只需要一个Grub4Dos批处理
以前的方法好复杂:用Grub4Dos获取硬盘活动分区号与最后分区号[2010-09-29]



动态生成变量

a,b,c,d,e这几个名字全是自动生成的
回复

使用道具 举报

676#
发表于 2010-11-4 11:26:55 | 只看该作者
Grub4Dos批处理?
wenv set g4d_disk=0 && /gp.bat 这句什么意思?是执行gp.bat里的命令么?
回复

使用道具 举报

677#
发表于 2010-11-4 11:56:49 | 只看该作者
这是两条命令
wenv set g4d_disk=0
/gp.bat                               # 执行批处理文件

我为了截屏方便将它合在一起写了,分开执行的话要多占两行,前面的文件内容会挤出屏幕外
回复

使用道具 举报

678#
发表于 2010-11-4 12:34:59 | 只看该作者
grub4dos什么时候可以直接执行 /gp.bat 这样的脚本?
不是要用WENV的read命令才可以运行脚本的么?我out了。

[ 本帖最后由 135956 于 2010-11-4 12:40 编辑 ]
回复

使用道具 举报

679#
发表于 2010-11-4 12:38:48 | 只看该作者
哈哈,现在发布的版本是支持的。
GRUB4DOS的批处理文件第一行是
!BAT
后面每一行都可以是GRUB4DOS支持的命令或外部命令.":"是注释符.
回复

使用道具 举报

680#
发表于 2010-11-4 13:06:55 | 只看该作者
这个功能是从哪个版本开始才有的?
回复

使用道具 举报

681#
发表于 2010-11-4 15:47:52 | 只看该作者
1.check 命令增加 -e 参数,左边的字符串支持转义符
    可以查找特殊字符,下面这条命令删除变量尾部的换行符
    WENV check -e "\n"=="${a:-1:1}" set a=${a:0:-1}

2.set 命令增加 -t 参数,剪切首尾空字符(回车、换行、制表符)
    chkpci -cc:1 | wenv set -t a=
变量a尾部没有换行

WENV set -t a=${a}
删除变量 a 首尾的空字符

wenv-tuxw-2010-11-04.zip (38.62 KB, 下载次数: 24)
回复

使用道具 举报

682#
发表于 2010-11-4 16:15:31 | 只看该作者
咦,什么时候取消支持{?_GET}变量了?
哦,变为${VAR,?} 了。

[ 本帖最后由 zxw 于 2010-11-4 16:31 编辑 ]
回复

使用道具 举报

683#
发表于 2010-11-4 16:26:42 | 只看该作者
我记得首尾空字符原来一直是自动删除的。

chkpci输出到变量后,尾部有回车换行符号,这个问题我早就发现了
chkpci -srs | wenv set a=
wenv get a && wenv set a=${a:0:-1}

[ 本帖最后由 zhaohj 于 2010-11-4 16:31 编辑 ]
回复

使用道具 举报

684#
发表于 2010-11-4 16:27:16 | 只看该作者
原帖由 zxw 于 2010-11-4 16:15 发表
咦,怎么不支持{?_GET}变量了?


这个在 2010-10-23 时取消了,因为 ?_GET 局限性比较大,C大有了新的取长度方法 ${VAR,?}。
这个功能推出的时间不长,取消后兼容性的影响不大,我同步了 ${VAR,?} 后取消了支持 ?_GET(C大的版本仍然是支持?_GET的)。
另一个原因一个原因是我编译的版本加入了较多的细节提示(C大将提示大部分提示信息放到debug on 状态后,正常命令与错误命令看不出区别来,所以有必要加入出错的细节提示),wenv 的体积增长较快,所以重复的功能去掉了

说明在这里:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=59#pid2069211


原帖由 zhaohj 于 2010-11-4 16:26 发表
我记得首尾空字符原来一直是自动删除的。

chkpci输出到变量后,尾部有回车换行符号,这个问题我早就发现了
chkpci -srs | wenv set a=
wenv get a && wenv set a=${a:0:-2}

自动删除的是空格,-t 删除的是空字符(包括回车、换行、制表)

chkpci -cc:02 | wenv set a=
wenv set b=a
wenv get
这样可以看到a和b之间换行了

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

使用道具 举报

685#
发表于 2010-11-4 16:39:29 | 只看该作者

回复 #684 tuxw 的帖子

才翻看了一下wenv-readme,汗,居然看漏了 ${VAR,?}。
另:wenv-readme关于set的-t参数似乎笔误为-e了?
回复

使用道具 举报

686#
发表于 2010-11-4 16:43:54 | 只看该作者
是的,写错了,下次改过来
回复

使用道具 举报

687#
发表于 2010-11-4 17:12:45 | 只看该作者
在README.TXT中加入了changelog,前后分开,待成熟变化不大时一并再处理。
@tuxw:
辛苦修改后加入到README.TXT

wenv的help里,-t应该在变量前面吧
wenv set [-t] variable=...

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

Snap2.jpg (10.98 KB, 下载次数: 79)

Snap2.jpg

wenv-readme.rar

6.04 KB, 下载次数: 29, 下载积分: 无忧币 -2

回复

使用道具 举报

688#
 楼主| 发表于 2010-11-5 00:27:17 | 只看该作者
GRUB4DOS 更新测试:(已经同步到nufans.net的最新版本)

1.重写run_line(执行一行命令函数)。
支持操作符连用。例:
echo a | echo b | echo c | echo
echo abcd > (md)0x300+1 && echo def
2.内置ECHO函数添加两个参数(默认不回车也不转义)
-n 不自动添加回车符
-e 允许转义符
3.添加操作符“>>”

注意:像下面的语句只有最后一个echo aaa的输出会重定向(这个和CMD有所不同)。
echo abcd && echo def && echo aaa >> (md)0x300+1

只有第一个echo abcd的输出会重定向。
echo abcd >> (md)0x300+1 && echo def

[ 本帖最后由 chenall 于 2010-11-5 00:29 编辑 ]
回复

使用道具 举报

689#
发表于 2010-11-5 07:46:56 | 只看该作者
这样样改一下很好,更直观
回复

使用道具 举报

690#
发表于 2010-11-5 09:42:00 | 只看该作者
2.内置ECHO函数添加两个参数(默认不回车也不转义)
-n 不自动添加回车符
-e 允许转义符
---------------
这里是否矛盾?默认应该回车吧。

测试结果是:

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

Snap1.jpg (66.25 KB, 下载次数: 79)

Snap1.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 02:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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