On Tuesday 25 August 2009 11:54:21 pm David C. Rankin wrote: > On Tuesday 25 August 2009 09:51:50 pm Sven-Hendrik Haase wrote: > > There are multiple ways: > > You can put "default 2" at the very top of your menu.lst which will > > always select the 2nd entry (0-based) by default. > > Another and maybe more modern way to do it is to add "default saved" > > at the top and then add "savedefault" below each individual entry. This > > way, Grub will always select the last selected entry. > > Sven, > > Thanks, sorry, I know all that. I'm looking for a quick command that does > NOT alter the menu.lst file, but sets some type of flag that tells grub do > NOT boot the default entry, instead, boot entry 5. > > I know there is something in kde4 that will do it because when you > hold-down the Restart option, you can set the next OS you want to boot if > you have more than 1 entry in menu.lst. Ever hear of anything like that > for Arch? > > With grubonce, you just enter grubonce (without arguments) and it returns > a list of what is in your menu.lst file: > > [23:52 dcrgx/home/david/scripts/file] # grubonce > 0: openSUSE 11.0 - 2.6.25.20-0.5 > 1: Failsafe -- openSUSE 11.0 - 2.6.25.20-0.5 > 2: openSUSE 11.1 - 2.6.27.19-3.2 (/dev/sdb1) > 3: Windows > > Then all you have to do is issue the command: > > # grubonce 2 > > and you will boot suse 11.1 next time. That's what I'm looking for. I'll > keep digging. > A, hah! Should have checked in the first place. suse just uses a script. Here it is: #!/usr/bin/perl # Keep this sort of configurable for the future. $GRUBDIR="/boot/grub"; # Parse the menu file, and see if we can get a match for a maybe given arg. open(MENU, "<$GRUBDIR/menu.lst") || die "no menu.lst in $GRUBDIR"; $gotit = 0; $titleno = -1; $global_default = undef; while(<MENU>) { m,\s*default\s+(.+), && $titleno == -1 && ($global_default = $1); next unless m,\s*title\s+(.*),i; $title_name = $1; $titleno++; if (@ARGV > 0) { # Argument may be entirely numerical, in which case it is an index, # or a perl RE that leads to the first title matching. if (( $ARGV[0] =~ m,^[0-9]+$, && $titleno eq $ARGV[0] ) || ( $ARGV[0] !~ m,^[0-9]+$, && $title_name =~ m,$ARGV[0],i) ) { $gotit = 1; last; } } else { print "$titleno: $title_name\n"; } } close(MENU); print "Warning: you haven't set a global default!\n" if !defined($global_default); # Without a command line argument, we have now listet the titles and are done. exit 0 if @ARGV < 1; # Else the user wants to write the default file. We have better found a match! if ($gotit > 0) { print "Warning: your global default is 'saved'; changing default permanently!" if $global_default eq "saved"; print "Using entry #$titleno: $title_name\n"; # set the magic one-time flag $titleno |= 0x4000; open(DEFFILE, ">$GRUBDIR/default") || die "Cannot open default file for writing"; $buf = $titleno . "\0" . "\n" x 9; syswrite(DEFFILE, $buf, 10); close(DEFFILE); exit 0; } else { print $ARGV[0] . " not found in $GRUBDIR/menu.lst\n"; exit 1; } -- David C. Rankin, J.D.,P.E. Rankin Law Firm, PLLC 510 Ochiltree Street Nacogdoches, Texas 75961 Telephone: (936) 715-9333 Facsimile: (936) 715-9339 www.rankinlawfirm.com