无忧启动论坛

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

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

  [复制链接]
391#
发表于 2010-10-8 02:28:03 | 只看该作者
原帖由 sratlf 于 2010-10-8 01:55 发表
那什么时候修正下吧

现在是把
(cd)/BOOT/G4D/WENV ${path}== && (cd)/BOOT/G4D/WENV set path=/WIN$.ISO && pause --wait=0 Now use /WIN$.ISO as default.
分成两行来执行就没问题了


调个顺序就可以了
(cd)/BOOT/G4D/WENV get path || pause --wait=0 Now use /WIN$.ISO as default. && (cd)/BOOT/G4D/WENV set path=/WIN$.ISO

既然外部命令已经有了绝对路径,可以
command --set-path=(cd)/BOOT/G4D
它不会受当前目录变化影响,除非你map将cd变化了

[ 本帖最后由 tuxw 于 2010-10-8 02:29 编辑 ]
回复

使用道具 举报

392#
发表于 2010-10-8 09:14:37 | 只看该作者
看到SRATLF对${VAR:x:y}的用法“从x开始提取y个字符,如果x为负数则从倒数x个开始提取”
他是y值是负数,我测试了一下,这里y和-y结果是相同的。
可否这样:y是正数,从左到右;y是负数,从右到左。

[ 本帖最后由 zhaohj 于 2010-10-8 09:53 编辑 ]

Snap1.jpg (27.92 KB, 下载次数: 80)

Snap1.jpg
回复

使用道具 举报

393#
发表于 2010-10-8 09:29:58 | 只看该作者
原意就是你说的这样,而且刚开始有这个截取功能是它是正常的,现在正负相同的话是有了BUG

我刚测试了下,是对的呀?
截取时左起第一个序号是0,右起第一个序号是-1

如果测试用的字符串长是偶数,截取一半,结果会相同,但这是正确的
WENV set t1=012345
WENV set t2=${t1:3:3}  #结果是345
WENV set t3=${t1:-3:3} #结果是345

======================
${var:x:y} ,x 是起点, y 是长度
如果想从-3往前截,应该是 ${var:-6:3}
除非你想实现 ${var:-3:-3} 得到结果倒过来 543,否则没有必要

[ 本帖最后由 tuxw 于 2010-10-8 10:00 编辑 ]
回复

使用道具 举报

394#
发表于 2010-10-8 09:55:45 | 只看该作者
你上面是X,我是指Y值
${var:x:y}
或者不允许Y负值

[ 本帖最后由 zhaohj 于 2010-10-8 09:58 编辑 ]
回复

使用道具 举报

395#
发表于 2010-10-8 09:57:29 | 只看该作者
@chenall   tuxw

谢谢提醒  最近几天睡眠不好 有点糊涂了  哈哈
回复

使用道具 举报

396#
发表于 2010-10-8 13:11:18 | 只看该作者

wenv制成ISO量产后有BUG?

我的菜单如下:
title 【 9 】输入路径运行ISO、IMG或IMA,直接回车运行/MY.IMG
wenv set path=$input,Input full name of the file:
wenv run find --set-root ${path}
wenv set suffix=$U,${path##.}
wenv ${suffix}== && find --set-root /MY.IMG && map --mem /MY.IMG (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==ISO && wenv run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
wenv ${suffix}==IMG && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==IMA && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
---------------
在量产后,运行此菜单会报错,我进入命令行模式测试,发现是在运行 wenv run map --mem ${path} (fd0) 这一步会出现找不到路径类似的错误。我把这里改成map --mem /MY.IMG (fd0)运行则正常。请C大测试,不知道各位有没有遇到?
回复

使用道具 举报

397#
发表于 2010-10-8 13:25:04 | 只看该作者

回复 #396 paladin15 的帖子

wenv set path=$U,$input,Input full name of the file:

同时手动输入需要以/开头 
回复

使用道具 举报

398#
发表于 2010-10-8 14:22:51 | 只看该作者

回复 #397 sratlf 的帖子

同样的菜单我在虚拟机里运行正常呀。
一定要加$U?
我手动输入是以/开头的。
回复

使用道具 举报

399#
发表于 2010-10-8 14:35:20 | 只看该作者
我刚刚又测试了下,把IMG或ISO放在硬盘上,然后用量产后的U盘启动,运行上面396楼的菜单运行正常。
现在考虑是不是因为量产后的U盘剩余部分格式化成了ZIP盘的原因,我再测试下格式化成HDD模式能不能正常启动。
回复

使用道具 举报

400#
 楼主| 发表于 2010-10-8 14:56:09 | 只看该作者
原帖由 tuxw 于 2010-10-8 02:04 发表



版主又发明了个用法:WENV ${path}== && ...
这个是比较边缘的用法(以后不一定被支持),因为有两种可能:
1、path不存在
2、path存在但值为空(目前除了一个默认变量外不会有这个情况,且新版用户不能 ...


嗯,不错。
应该过滤后面的空格,如果非要空格的可以要用引号。

@zhaohj
建议不错,下个版本考虑实现。
因为linux shell里面没有这个用法所以当时也就没有考虑了。
看到你的贴子,记得cmd里面的类似的用法。想想觉得也是个不错的功能。

但是和你所提到的不一样。后面的Y始终代表一个长度。负数代表着到倒数第三个。
像以下的
echo ${a:-3:-3}
得到的结果应该为空。

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

使用道具 举报

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

回复 #398 paladin15 的帖子

title 【 9 】输入路径运行ISO、IMG或IMA,直接回车运行/MY.IMG
wenv set path=$U,$input,Input full name of the file:  
wenv run find --set-root ${path}
wenv set suffix=${path#.}
wenv get suffix || find --set-root /MY.IMG && map --mem /MY.IMG (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==ISO && wenv run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
wenv ${suffix}<>ISO && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
回复

使用道具 举报

402#
发表于 2010-10-8 15:23:57 | 只看该作者

回复 #398 paladin15 的帖子

title 【 9 】输入路径运行ISO、IMG或IMA,直接回车运行/MY.IMG
wenv set path=$U,$input,Input full name of the file:   $U不一定需要吧?
wenv run find --set-root ${path}
wenv set suffix=${path#.}                #是取第一个.后面的,要取最后一个.后面的符吧。
wenv get suffix || find --set-root /MY.IMG && map --mem /MY.IMG (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==ISO && wenv run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
wenv ${suffix}<>ISO && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot

我写的菜单在ISO或IMG在硬盘上时启动正常,放文件到U盘上就不行了。
回复

使用道具 举报

403#
发表于 2010-10-8 15:37:39 | 只看该作者

回复 #402 paladin15 的帖子

$U 是转换为大写   你确定路径里会包含多个 . 吗

"放文件到U盘上就不行了。"

先确定你U盘在grub4dos下可以访问  或者手动在命令行下用find  看能不能找到
回复

使用道具 举报

404#
发表于 2010-10-8 16:01:31 | 只看该作者

回复 #403 sratlf 的帖子

${VAR##STRING} 提取STRING字符串后面的内容,从右往左第一个位置开始.
应该是取两个##
U盘上的文件可以访问,因为我手动 map --mem /MY.IMG (fd0) 可以正常运行,但是 wenv run map --mem ${path} (fd0) 不行。
回复

使用道具 举报

405#
发表于 2010-10-8 16:18:56 | 只看该作者

回复 #404 paladin15 的帖子

算了  你手动运行试下吧  看截取内容是否符合要求  我没测试过${VAR##STRING}

你WENV文件是怎么定位的  要确定执行find --set-root 后还能找到WENV
回复

使用道具 举报

406#
 楼主| 发表于 2010-10-8 17:02:08 | 只看该作者
原帖由 sratlf 于 2010-10-8 16:18 发表
算了  你手动运行试下吧  看截取内容是否符合要求  我没测试过${VAR##STRING}

你WENV文件是怎么定位的  要确定执行find --set-root 后还能找到WENV


#     匹配第一个后面的内容
##   匹配最后一个后面的内容,如果想提取最后一个.xxx那最好还是用##

#方向从左往右
如果把#换成%则方向相反。
回复

使用道具 举报

407#
发表于 2010-10-8 17:50:44 | 只看该作者

回复 #405 sratlf 的帖子

wenv get 符合要求
wenv放在/grub/ 目录,没有用指定
find --set-root 后还能找到wenv

在U盘不行,在硬盘可以呀,奇怪了,就这里不明白,晕了。
回复

使用道具 举报

408#
 楼主| 发表于 2010-10-8 18:42:08 | 只看该作者
原帖由 paladin15 于 2010-10-8 17:50 发表
wenv get 符合要求
wenv放在/grub/ 目录,没有用指定
find --set-root 后还能找到wenv

在U盘不行,在硬盘可以呀,奇怪了,就这里不明白,晕了。


因为你find --set-root 之后还在同一个分区上,当然可以了。


更新了一下,修正了几个BUG,顺便添加前面说的功能提取-Y个字符。
2010-10-08
   1.修正cal ++VARIABLE没有成功的BUG。
   2.修正比较符BUG。
   3.变量提取支持${VARIABLE:X:-Y}的形式,-Y代表提取到-Y个字符(即倒数Y个字符都不要).
回复

使用道具 举报

409#
发表于 2010-10-8 18:50:11 | 只看该作者

回复 #407 paladin15 的帖子

"find --set-root 后还能找到wenv"

这个是纯粹的废话  

假如WENV在U盘  要加载的img在硬盘  你用find --set-root 将root改到硬盘上  同时还没有指定WENV在哪  那向下执行 map --mem 肯定会有错误
回复

使用道具 举报

410#
 楼主| 发表于 2010-10-8 18:54:15 | 只看该作者
关于外部命令,以后可能会有一种方法可以把需要经常使用的外部命令加载到内存中保存地来,然后就可以不用管外部命令放哪了。直接从内存中调用。
回复

使用道具 举报

411#
发表于 2010-10-8 19:12:42 | 只看该作者

回复 #410 chenall 的帖子

那样就更方便了  为什么不把WENV改为内置命令呢
回复

使用道具 举报

412#
 楼主| 发表于 2010-10-8 19:59:47 | 只看该作者
原帖由 sratlf 于 2010-10-8 19:12 发表
那样就更方便了  为什么不把WENV改为内置命令呢


内置命令会占用GRUB4DOS本来就很紧张的代码空间


另外。wenv刚刚重新上传了一个新版。

为了避免出错。添加一个check子命令用于比较。

之前的wenv XX==YY,现在需要在前面添加一个check变成
wenv check xxx==yy
回复

使用道具 举报

413#
发表于 2010-10-8 20:07:43 | 只看该作者

回复 #412 chenall 的帖子

也是 现在WENV体积也越来越大了
回复

使用道具 举报

414#
发表于 2010-10-8 20:33:43 | 只看该作者
支持了个人认为.
对于wenv run command
出现的内存地址应该是指向一个字符串的地址...
回复

使用道具 举报

415#
 楼主| 发表于 2010-10-8 21:09:39 | 只看该作者
原帖由 wlsx 于 2010-10-8 20:33 发表
支持了个人认为.
对于wenv run command
出现的内存地址应该是指向一个字符串的地址...



很早就是这样子啦?你难道没有试过.
回复

使用道具 举报

416#
发表于 2010-10-8 21:39:46 | 只看该作者

回复 #409 sratlf 的帖子

首先谢谢两位大的回复,不过我还是不太明白。可能是我说得不太清楚。
我的测试环境是把菜单做成ISO,量产到U盘,然后在U盘的可见区域放入MY.IMG,在硬盘一分区中放入HDD.IMG,编辑菜单如下:
title 【 9 】输入路径运行ISO、IMG或IMA,直接回车运行/MY.IMG
wenv set path=$input,Input full name of the file:
wenv run find --set-root ${path}
wenv set suffix=$U,${path##.}
wenv ${suffix}== && find --set-root /MY.IMG && map --mem /MY.IMG (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==ISO && wenv run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
wenv ${suffix}==IMG && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
wenv ${suffix}==IMA && wenv run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
-------------
我运行此菜单,输入/MY.IMG,执行出错,我手动一步步执行,发现出错在 wenv run map --mem ${path} (fd0)
再次运行输入HDD.IMG,执行成功
第三次执行,直接回车也运行成功。
在这里我就不明白了,既然直接回车可以运行成功,说明能读取U盘中的文件,而且运行HDD.IMG成功,说明菜单也应该是没问题的。

chenall  大大说的“因为你find --set-root 之后还在同一个分区上,当然可以了。”,这里我应该不是在同一分区上,U盘是量产的。

sratlf 大大说的“假如WENV在U盘  要加载的img在硬盘  你用find --set-root 将root改到硬盘上  同时还没有指定WENV在哪  那向下执行 map --mem 肯定会有错误”,情况也不是这样的,我在USB-ROM中启动,然后find --set-root都要改变root,但在硬盘上wenv可以运行正常呀。

希望两位大大帮我分析下问题出在哪了,麻烦了!

补充一点,我用ISO在虚拟机上测试都正常,这就相当于前面测试环境中的硬盘测试。

[ 本帖最后由 paladin15 于 2010-10-8 21:41 编辑 ]
回复

使用道具 举报

417#
发表于 2010-10-8 21:47:13 | 只看该作者

回复 #416 paladin15 的帖子

贴图说话吧  看来是说不明白了  还是想不明白为什么会出错

suffix=$U,${path##.}  这个需要问chenall大  不确定是不是有这种用法

${suffix}== &&  判断是否为空最好用 WENV get suffix ||

另外  你判断的有点太麻烦了  假如是.gz的文件就不能正常加载

路径是否为空  为空设置默认  最后截取是否为ISO  是按ISO方式加载  否全部按IMG方式加载

可以判断为非ISO在前  这样加载默认时效率较高  你这样写太繁琐了

[ 本帖最后由 sratlf 于 2010-10-8 21:51 编辑 ]
回复

使用道具 举报

418#
发表于 2010-10-8 21:52:41 | 只看该作者

回复 #417 sratlf 的帖子

${suffix}== &&  判断是否为空最好用 WENV get suffix ||    这个改过来了
不为ISO的也改过来了。

虚拟机可以截图,但是虚拟机可以用U盘启动吗?我测试好像不行呀。
真实机器要拍照,我手边也没相机。

[ 本帖最后由 paladin15 于 2010-10-8 21:54 编辑 ]
回复

使用道具 举报

419#
发表于 2010-10-8 21:58:17 | 只看该作者
WENV get suffix ||

这里我一直不明白,版主大大用大写的WENV可以正常运行呀?我只能用小写的。
回复

使用道具 举报

420#
发表于 2010-10-8 22:02:04 | 只看该作者
原帖由 paladin15 于 2010-10-8 21:58 发表

这里我一直不明白,版主大大用大写的WENV可以正常运行呀?我只能用小写的。



因为我WENV原文件  文件名是大写的。。。。

那你看看虚拟机能不能重现错误  

或者你把实机出现错误时最后几行代码完整抄下 贴上来也行

[ 本帖最后由 sratlf 于 2010-10-8 22:03 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 17:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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