![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 04:14 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 关于&&用法 |
| 可打印版本 2,286 / 7 |
| 第1楼 yaya | 发表于 2008-08-01 16:53 |
| 银牌会员 发帖 353 积分 1,009 | |
|
关于&&用法 请教不点:
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条. 可是程序执行时,提示找不到文件.按任意键又返回了启动菜单. 怎样才能实现这一功能?请赐教!谢谢! |
|
| 第2楼 不点 | 发表于 2008-08-01 22:37 |
| 银牌会员 发帖 1,115 积分 2,491 | |
|
谢谢报告此问题。
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 |
|
| 第3楼 yaya | 发表于 2008-08-06 09:18 |
| 银牌会员 发帖 353 积分 1,009 | |
|
使用
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版问题依旧. |
|
| 第4楼 不点 | 发表于 2008-08-06 13:29 |
| 银牌会员 发帖 1,115 积分 2,491 | |
|
嗯,其实并不能把所有的问题都归结为 grub4dos 的 bug。
比如说,chainloader (hd0,0)+1 之后能否启动,与你在 (hd0,0)+1 上放置的引导代码有关,如果是微软的,则它的启动失败不是很意外的,因为微软的代码并不特别考虑对 USB 的支持。 根据其他人的报告,今天晚上可能还会发布一个版本,解决相关问题。谢谢支持。 |
|
| 第5楼 yaya | 发表于 2008-08-15 09:45 |
| 银牌会员 发帖 353 积分 1,009 | |
|
使用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个空文件. |
|
| 第6楼 zw2312914 | 发表于 2008-08-15 16:03 |
| 初级用户 发帖 16 积分 39 | |
|
看了楼主的菜单,有个执行效率的小疑问。
你的grubhere.id相当于是个判断u盘的标志文件。你是使用cat来判断的,但 cat 命令实际上是找到并显示文件内容的命令,所以,实际执行效率可能和用 ls 命令来判断相仿。 而 find 命令只判断存在与否,不用再显示文件内容,因此效率可能要高一点。比如: find (hd0,0)/grubhere.id && map (hd0) (hd1) |
|
| 第7楼 不点 | 发表于 2008-08-15 17:26 |
| 银牌会员 发帖 1,115 积分 2,491 | |
|
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 ] |
|
| 第8楼 yaya | 发表于 2008-08-18 10:48 |
| 银牌会员 发帖 353 积分 1,009 | |
|
可以使用以下语句,更简化一些。
title 启动 Windows NT/2K/XP/2K3 root && map (hd0) (hd1) root && map (hd1) (hd0) root && map --hook find --set-root /ntldr chainloader /ntldr |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |