中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 关于&&用法 上一主题 | 下一主题
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『楼 主』:  关于&&用法

请教不点: cat (hd0,0)/grubhere.id || chainloader (hd0,0) +1 cat (hd0,0)/grubhere.id && map (hd0) (hd1) cat (hd0,0)/grubhere.id && map (hd1) (hd0) cat (hd0,0)/grubhere.id && chainloader (hd1,0) 语句本意是当u盘识别为a:时,(hd0,0)/grubhere.id 不存在,执行chainloader +1, 当u盘识别为c:时,(hd0,0)/grubhere.id 存在,执行后3条. 可是程序执行时,提示找不到文件.按任意键又返回了启动菜单. 怎样才能实现这一功能?请赐教!谢谢!


2008-8-1 16:53
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 2 楼』:  

谢谢报告此问题。 grub 中的函数在执行完了之后,有一个出错值 errnum,以及一个返回值。 || 和 && 操作符不使用 errnum 的值,而使用的是函数的返回值。 当 cat 遇到失败时,errnum 可能也同时设置了,如果执行 || 之后的命令之前没能将 errnum 重置为 0,则整个复合命令的执行结果也将被认为是失败的,于是终止后续的菜单命令的执行。 似乎合理的方案应该在执行 || 之后的命令之前清除 errnum,但是,有时候保留这一 errnum 或许是有用的,所以,我现在还不能肯定是否应该清除 errnum 的值。 作为权宜之计,大家可以配合 errorcheck off 来使用 || 和 && 操作符。很抱歉,给大家带来一些不便,不过今后会解决的。 当使用 errorcheck off 之后,一定要在执行 boot 之前有一条 errorcheck on 来结束 errorcheck off 的指定,否则后续的菜单操作会失败。 errorcheck off cat (hd0,0)/grubhere.id || chainloader (hd0,0) +1 cat (hd0,0)/grubhere.id && map (hd0) (hd1) cat (hd0,0)/grubhere.id && map (hd1) (hd0) cat (hd0,0)/grubhere.id && chainloader (hd1,0) errorcheck on




因为我们亲手创建,这个世界更加美丽。
2008-8-1 22:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『第 3 楼』:  

使用 errorcheck off cat (hd0,0)/grubhere.id || chainloader (hd0,0)+1 cat (hd0,0)/grubhere.id && map (hd0) (hd1) cat (hd0,0)/grubhere.id && map (hd1) (hd0) cat (hd0,0)/grubhere.id && chainloader (hd1,0)+1 errorcheck on 后,不再提示找不到文件,但必须修改成 errorcheck off cat (hd0,0)/grubhere.id || chainloader (hd0,0)/ntldr ...... 或者 errorcheck off find --set-root /ntldr cat (hd0,0)/grubhere.id || chainloader +1 ...... 才能正确执行. 使用 cat (hd0,0)/grubhere.id || chainloader (hd0,0)+1 后,光标不停闪烁,死机. 使用grub4dos 2008.8.3版问题依旧.


2008-8-6 09:18
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 4 楼』:  

嗯,其实并不能把所有的问题都归结为 grub4dos 的 bug。 比如说,chainloader (hd0,0)+1 之后能否启动,与你在 (hd0,0)+1 上放置的引导代码有关,如果是微软的,则它的启动失败不是很意外的,因为微软的代码并不特别考虑对 USB 的支持。 根据其他人的报告,今天晚上可能还会发布一个版本,解决相关问题。谢谢支持。




因为我们亲手创建,这个世界更加美丽。
2008-8-6 13:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『第 5 楼』:  

使用grub4dos 2008.8.10版,不用加errorcheck off和errorcheck on就能正常运行.发现菜单可以循环选择了. 用u盘启动,不论识别为A:或者C:,以下命令都可以启动winxp. title 启动 Windows NT/2K/XP/2K3 cat (hd0,0)/grubhere.id && map (hd0) (hd1) cat (hd0,0)/grubhere.id && map (hd1) (hd0) cat (hd0,0)/grubhere.id && map --hook find --set-root /ntldr chainloader /ntldr grubhere.id 是u盘上的1个空文件.


2008-8-15 09:45
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zw2312914
初级用户





积分 39
发帖 16
注册 2007-2-19
状态 离线
『第 6 楼』:  

看了楼主的菜单,有个执行效率的小疑问。 你的grubhere.id相当于是个判断u盘的标志文件。你是使用cat来判断的,但 cat 命令实际上是找到并显示文件内容的命令,所以,实际执行效率可能和用 ls 命令来判断相仿。 而 find 命令只判断存在与否,不用再显示文件内容,因此效率可能要高一点。比如: find (hd0,0)/grubhere.id && map (hd0) (hd1)


2008-8-15 16:03
查看资料  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 7 楼』:  

root 和 rootnoverify 命令后面不加任何参数,则返回当前磁盘是否为硬盘:如果当前磁盘是软盘,则返回 false;如果当前盘是硬盘,则返回 true。 如果能用上这个,可能会简化一些。不过 cat 也是很好的,因为显示空文件其实也很快。 楼上的 find 命令不行,find 似乎并不适合用作这样的目的。ls 也不太好,因为 ls 有 auto completion 的功能,比如 ls /grldr 能够列出 grldr1, grldr2, grldr.mbr, grldr.tmp 等等,凡是以 grldr 打头的都能列出来。 [ Last edited by 不点 on 2008-8-15 at 05:31 PM ]




因为我们亲手创建,这个世界更加美丽。
2008-8-15 17:26
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『第 8 楼』:  

可以使用以下语句,更简化一些。 title 启动 Windows NT/2K/XP/2K3 root && map (hd0) (hd1) root && map (hd1) (hd0) root && map --hook find --set-root /ntldr chainloader /ntldr


2008-8-18 10:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: