|
Lines 129-144
Link Here
|
| 129 |
|
129 |
|
| 130 |
grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` |
130 |
grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` |
| 131 |
|
131 |
|
| 132 |
prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^saved_entry=//p'` |
132 |
if [ ! -d "${grubdir}" ]; then |
| 133 |
if [ "$prev_saved_entry" ]; then |
133 |
echo "grub directory doesn't exist." 1>&2 |
| 134 |
$grub_editenv ${grubdir}/grubenv set prev_saved_entry="$prev_saved_entry" |
134 |
exit 1 |
| 135 |
else |
|
|
| 136 |
# We need some non-empty value for prev_saved_entry so that GRUB will |
| 137 |
# recognise that grub-reboot has been used and restore the previous |
| 138 |
# saved entry. "0" is the same as an empty value, i.e. the first menu |
| 139 |
# entry. |
| 140 |
$grub_editenv ${grubdir}/grubenv set prev_saved_entry=0 |
| 141 |
fi |
135 |
fi |
|
|
136 |
|
| 137 |
prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^prev_saved_entry=//p'` |
| 138 |
if [ -z "${prev_saved_entry}" ]; then |
| 139 |
prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^saved_entry=//p'` |
| 140 |
if [ "$prev_saved_entry" ]; then |
| 141 |
$grub_editenv ${grubdir}/grubenv set prev_saved_entry="$prev_saved_entry" |
| 142 |
else |
| 143 |
# We need some non-empty value for prev_saved_entry so that GRUB will |
| 144 |
# recognise that grub-reboot has been used and restore the previous |
| 145 |
# saved entry. "0" is the same as an empty value, i.e. the first menu |
| 146 |
# entry. |
| 147 |
$grub_editenv ${grubdir}/grubenv set prev_saved_entry=0 |
| 148 |
fi |
| 149 |
fi |
| 150 |
|
| 151 |
tmp=$(echo ${entry} | sed 's/[^0-9]//g') |
| 152 |
if [ "${tmp}" != "${entry}" -o "${tmp}" -gt 100 ]; then |
| 153 |
# User specified a menuentry name. Let's check if it exists |
| 154 |
name= |
| 155 |
names=$(sed -n $'/^menuentry / { s/.*[\'"]\\([^\'"]*\\)[\'"].*/\\1/ ; p }' \ |
| 156 |
${grubdir}/grub.cfg | grep "${entry}") |
| 157 |
if [ -z "${names}" ]; then |
| 158 |
echo "entry not found." 1>&2 |
| 159 |
exit 1 |
| 160 |
fi |
| 161 |
OLDIFS=$IFS |
| 162 |
IFS=$'\n' |
| 163 |
for n in ${names}; do |
| 164 |
if [ "${n}" == "${entry}" ]; then |
| 165 |
name="${entry}" |
| 166 |
fi |
| 167 |
done |
| 168 |
IFS=OLDIFS |
| 169 |
if [ -z "${name}" ]; then |
| 170 |
name=$(echo "${names}" | head -n 1) |
| 171 |
if [ "${names}" != "${name}" ]; then |
| 172 |
echo "matched multiple entries. using first entry found." 1>&2 |
| 173 |
fi |
| 174 |
fi |
| 175 |
entry="${name}" |
| 176 |
fi |
| 177 |
|
| 142 |
$grub_editenv ${grubdir}/grubenv set saved_entry="$entry" |
178 |
$grub_editenv ${grubdir}/grubenv set saved_entry="$entry" |
| 143 |
|
179 |
|
| 144 |
# Bye. |
180 |
# Bye. |