home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
rescue
/
usr
/
sbin
/
grubonce
< prev
next >
Wrap
Text File
|
2006-11-29
|
2KB
|
58 lines
#!/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;
}