Files
funky_tv/新建文件夹 (4)/tools/grub-editenv.sh
2024-08-29 21:47:24 +08:00

77 lines
2.3 KiB
Bash

#!/bin/sh
if which grub-editenv-bk >/dev/null 2>&1; then
grub_editenv_cmd=grub-editenv-bk
elif which grub2-editenv-bk >/dev/null 2>&1; then
grub_editenv_cmd=grub2-editenv-bk
else
grub_editenv_cmd=grub-editenv-bk
fi
curdate=$(date)
if [ -e /dev/mapper/ventoy -a -d /etc/vtoyboot/editenv ]; then
$grub_editenv_cmd $* > /etc/vtoyboot/editenv/tmp_stdout 2>/etc/vtoyboot/editenv/tmp_stderr
code=$?
if [ $code -eq 0 ]; then
cat /etc/vtoyboot/editenv/tmp_stdout
exit 0
fi
newpara=$(echo $* | sed "s#/dev/mapper/ventoy#/dev/sda#")
echo "[$curdate] oldpara=$* newpara=$newpara" >> /etc/vtoyboot/editenv/match.log
id=1
while [ -n "1" ]; do
if [ -d /etc/vtoyboot/editenv/$id ]; then
para=$(head -n1 /etc/vtoyboot/editenv/$id/param)
if [ "$para" = "$newpara" ]; then
code=$(cat /etc/vtoyboot/editenv/$id/errcode)
cat /etc/vtoyboot/editenv/$id/stdout
if [ $code -ne 0 ]; then
cat /etc/vtoyboot/editenv/$id/stderr >&2
fi
echo "[$curdate] grub-editenv match history id=$id code=$code" >> /etc/vtoyboot/editenv/match.log
exit $code
fi
else
break
fi
id=$(expr $id + 1)
done
echo "[$curdate] grub-editenv NO match $*" >> /etc/vtoyboot/editenv/match.log
cat /etc/vtoyboot/editenv/tmp_stdout
cat /etc/vtoyboot/editenv/tmp_stderr >&2
exit $code
else
[ -d /etc/vtoyboot/editenv ] || mkdir -p /etc/vtoyboot/editenv
id=1
override=0
while [ -d /etc/vtoyboot/editenv/$id ]; do
para=$(head -n1 /etc/vtoyboot/editenv/$id/param)
if [ "$para" = "$*" ]; then
echo "[$curdate] override $id $*" >> /etc/vtoyboot/editenv/history.log
override=1
break
fi
id=$(expr $id + 1)
done
if [ $override -eq 0 ]; then
echo "[$curdate] $*" >> /etc/vtoyboot/editenv/history.log
fi
mkdir -p /etc/vtoyboot/editenv/$id
echo "$*" > /etc/vtoyboot/editenv/$id/param
$grub_editenv_cmd $* > /etc/vtoyboot/editenv/$id/stdout 2>/etc/vtoyboot/editenv/$id/stderr
code=$?
echo $code > /etc/vtoyboot/editenv/$id/errcode
cat /etc/vtoyboot/editenv/$id/stdout
cat /etc/vtoyboot/editenv/$id/stderr >&2
exit $code
fi