无忧启动论坛

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

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

  [复制链接]
1#
发表于 2010-2-2 16:19:24 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2010-10-5 18:28:47 | 显示全部楼层

回复 #330 chenall 的帖子

不知2010-10-05版在哪下载  

http://code.google.com/p/grubutils/downloads/list  上是1004
回复

使用道具 举报

3#
发表于 2010-10-5 20:32:55 | 显示全部楼层
有点问题  C大

title img&iso
WENV set path=$U,$input,Input the path,begin with "/" :
WENV run find --set-root ${path}
WENV set de=${path:-3:2}
WENV get de=IM && WENV run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader ()+1 && boot
WENV run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
kernel

测试加载img正常  加载iso执行到map --mem完成 下面应该执行map --hook 却提示 No such command : WENV

用这个菜单却完全正常  加载iso和img都没问题
title mg&iso  use ISO as default
WENV set path=$U,$input,Input the path, begin with "/" :
WENV run find --set-root ${path}
WENV set de=$U,$input,Input please:    //需手动输入IMG来加载IMG  默认加载ISO
WENV get de=IMG && WENV run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader ()+1 && boot
WENV run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
kernel

测试用的文件路径是 /BOOT/IMGS/DTS.IMA  和 /BOOT/IMGS/ADD.ISO
回复

使用道具 举报

4#
发表于 2010-10-6 08:48:09 | 显示全部楼层
原帖由 chenall 于 2010-10-5 20:58 发表


注意:目前没有wenv get de=im这样的用法,会出错的...

出现找不到wenv,wenv放在哪里的(fd0)?


wenv是在U盘上  USB-HDD启动  /BOOT/GRUB下

另回复 #341tuxw  在菜单里有写 command --set-path /BOOT/GRUB

很奇怪的是#335两个菜单  

第一个是WENV提取指定字符再赋给新的变量  运行有问题  第二个是手动输入再执行WENV get就没有问题

想不明白

2010-10-05
   1.修正calc命令除法计算的bug.
   2.整合醉书生的修改版,并修复几个小bug.
   3.添加字符串比较功能. == <>

字符串比较功能例子:
wenv ${a}==abc && echo abc
wenv ${VAR}==5 && echo 5
wenv ${VAR}<>5 && echo not 5


添加了字符串比较功能啊  晚上回去再测试下  现在是不行了
回复

使用道具 举报

5#
发表于 2010-10-6 10:48:24 | 显示全部楼层

回复 #354 tuxw 的帖子

usb-cdrom启动的好说  usb-hdd启动就麻烦了该怎么写能保证不会判断失误(有时会交换磁盘顺序)

而且有影响的话  为什么第二个菜单就能正确执行呢
回复

使用道具 举报

6#
发表于 2010-10-6 10:59:59 | 显示全部楼层

回复 #356 tuxw 的帖子

嘿嘿  手机回复完了才看到  提取的两个变量值都是正确的  昨晚试过了

全手动输入 在map --mem前用get能看到de值是正确的  是输入path的指定两个字符

补充  输入path时是手动输入的  没有用tab自动补全

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

使用道具 举报

7#
发表于 2010-10-6 11:31:33 | 显示全部楼层

回复 #358 tuxw 的帖子

谢谢  晚上回去测试下
回复

使用道具 举报

8#
发表于 2010-10-6 18:37:52 | 显示全部楼层
这结果让我有点无奈

回复

使用道具 举报

9#
发表于 2010-10-6 18:49:33 | 显示全部楼层

回复 #370 tuxw 的帖子

那个错误是正常  直接执行kernel都这样  是这判断结果让我郁闷  

比如 WENV ${de}==ISO || kernel  此时de值为IMA  这样判断的话应该会执行kernel  但是没有

WENV ${de}==ISO && kernel  进行判断不应该执行kernel  结果却执行了

想不明白了  不知道为什么结果会这样

[ 本帖最后由 sratlf 于 2010-10-6 19:02 编辑 ]
回复

使用道具 举报

10#
发表于 2010-10-6 19:49:22 | 显示全部楼层
@tuxw  #369的图片就是在虚拟机测试  手动输入来的  结果就是那个

另外这个菜单写法
WENV get de=IMG && WENV run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader ()+1 && boot
WENV run map --mem ${path} (0xff) && map --hook && chainloader (0xff) && boot
是有问题的
即使IMG判断正常,但如果后面的任一条语句失败,它会转而执行ISO句,而这时外部命令路径很可能已经变了,前面的WENV 就会出错,而且IMG去用ISO的方式启动也不可能正常。所以后面一条命令也应该用条件限制住


确实有道理  会加上个限制  谢谢提醒

@chenall

新版测试没有问题了  测试比较结果这次没问题了
回复

使用道具 举报

11#
发表于 2010-10-7 23:42:53 | 显示全部楼层
麻烦C大看下是否是bug



接上图

回复

使用道具 举报

12#
发表于 2010-10-7 23:52:54 | 显示全部楼层
title [09] Install MS Windows NT5X (/WIN$.ISO default) \n Install OS MS 2K/XP/2003 From /WIN$.ISO as default
clear
fallback 15
(cd)/BOOT/G4D/WENV run pause --wait=0 Please input ISO/IMG PATH or press Enter to use /WIN$.ISO as default.
(cd)/BOOT/G4D/WENV set path=$U,$input,Input PATH here, begin with "/" :
(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 set de=${path:-3:3}
(cd)/BOOT/G4D/WENV run find --set-root --ignore-floppies --ignore-cd ${path}
(cd)/BOOT/G4D/WENV run pause --wait=0 Now loading ${path} ...
(cd)/BOOT/G4D/WENV run pause --wait=0 1
(cd)/BOOT/G4D/WENV ${de}==ISO || (cd)/BOOT/G4D/WENV run map --mem ${path} (fd0) && map --hook && rootnoverify (fd0) && chainloader (fd0)+1 && boot
(cd)/BOOT/G4D/WENV run pause --wait=0 2

cat --length=0 (cd)/BOOT/IMGS/FIRADISK.IMG && root (cd) || find --set-root --ignore-floppies /BOOT/IMGS/FIRADISK.IMG
(cd)/BOOT/G4D/WENV run pause --wait=0 3
map --mem ()/BOOT/IMGS/FIRADISK.IMG (fd1)
(cd)/BOOT/G4D/WENV run pause --wait=0 4
map --mem (md)0x6000+800 (fd0)
(cd)/BOOT/G4D/WENV run pause --wait=0 5
(cd)/BOOT/G4D/WENV run find --set-root --ignore-floppies --ignore-cd ${path}
(cd)/BOOT/G4D/WENV run pause --wait=0 6
(cd)/BOOT/G4D/WENV run map --mem ()${path} (0xff) || (cd)/BOOT/G4D/WENV run map ()${path} (0xff)
(cd)/BOOT/G4D/WENV run pause --wait=0 7

map --hook
dd if=(fd1) of=(fd0) count=1
(cd)/BOOT/G4D/WENV run pause --wait=0 Input D to boot from the disk,or press Enter to boot form the ISO.
(cd)/BOOT/G4D/WENV set in=$U,$input,Input here :
(cd)/BOOT/G4D/WENV ${in}==D || chainloader (0xff) && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && ls /WIN_NT$.~BT/SETUPLDR.BIN && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && ls /NTDETECT.COM && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /NTLDR && ls /NTDETECT.COM && chainloader --force /NTLDR && boot
kernel

同时测试着还有一个问题  上面是测试用完整菜单  

用WIN$.ISO测试时在1和2中间会加载一次WIN$.ISO   (理论来说此处不应该加载,de值为ISO,不应执行后面)  在6和7中间会再加载一次

正常来说应该只加载一次  (即6和7中间那次)

而且1和2中间部分(蓝字部分)在手动输入测试时却正常  不明白为什么  附图

回复

使用道具 举报

13#
发表于 2010-10-7 23:55:06 | 显示全部楼层
原帖由 chenall 于 2010-10-7 23:51 发表
这不是BUG.

find 查找文件必须使用/开头,你可以用/WIN$.ISO就不会了.

find 命令后面如果没有/开头,则认为这是一个命令.



哦  是我的疏忽  不过为什么后面几个随便写的变量 find却说是(hd0,0)呢
回复

使用道具 举报

14#
发表于 2010-10-8 01:55:20 | 显示全部楼层

回复 #388 chenall 的帖子

那什么时候修正下吧

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

使用道具 举报

15#
发表于 2010-10-8 09:57:29 | 显示全部楼层
@chenall   tuxw

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

使用道具 举报

16#
发表于 2010-10-8 13:25:04 | 显示全部楼层

回复 #396 paladin15 的帖子

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

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

使用道具 举报

17#
发表于 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
回复

使用道具 举报

18#
发表于 2010-10-8 15:37:39 | 显示全部楼层

回复 #402 paladin15 的帖子

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

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

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

使用道具 举报

19#
发表于 2010-10-8 16:18:56 | 显示全部楼层

回复 #404 paladin15 的帖子

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

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

使用道具 举报

20#
发表于 2010-10-8 18:50:11 | 显示全部楼层

回复 #407 paladin15 的帖子

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

这个是纯粹的废话  

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

使用道具 举报

21#
发表于 2010-10-8 19:12:42 | 显示全部楼层

回复 #410 chenall 的帖子

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

使用道具 举报

22#
发表于 2010-10-8 20:07:43 | 显示全部楼层

回复 #412 chenall 的帖子

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

使用道具 举报

23#
发表于 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 编辑 ]
回复

使用道具 举报

24#
发表于 2010-10-8 22:02:04 | 显示全部楼层
原帖由 paladin15 于 2010-10-8 21:58 发表

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



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

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

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

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

使用道具 举报

25#
发表于 2010-10-8 23:11:23 | 显示全部楼层

回复 #422 paladin15 的帖子

你WENV文件在什么位置  有用command --set-path=  处理吗  

或者你继续向下执行一条  wenv get  看是什么结果  感觉应该是wenv run find --set-root ${path}后找不到wenv造成的
回复

使用道具 举报

26#
发表于 2010-10-8 23:56:12 | 显示全部楼层

回复 #425 paladin15 的帖子

我能先问句  /0pe/memtest.img  是怎么来的吗
回复

使用道具 举报

27#
发表于 2010-10-9 00:19:07 | 显示全部楼层
原帖由 paladin15 于 2010-10-9 00:00 发表
是我量产完U盘,剩余空间格式化成FAT32以后复制进去的。
或者你是想我问这个IMG是哪来的。我是从兄弟的ISO中提取的,忘记了是哪位仁兄了,抱歉!运行完后显示是memtest v4.10



不明白了  不知道为什么你可以find找到  却map不了  而且不是WENV找不到的错误提示  而是刚才find的文件找不到的错误提示  无语。。。。
回复

使用道具 举报

28#
发表于 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#.}  不知是哪里错了
回复

使用道具 举报

29#
发表于 2010-10-15 09:10:43 | 显示全部楼层

回复 #534 tuxw 的帖子

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

使用道具 举报

30#
发表于 2010-10-25 10:20:15 | 显示全部楼层

回复 #616 tuxw 的帖子

有时间写个完整说明吧  增强的几个功能说明都分散在几个帖子里  不利于查找  这样也方便对新功能感兴趣的人进行测试
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-7 22:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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