Hello Jarek,
It's possible to do with grub what you want to do.
You will need to script a little using grub which use a shell like syntax.
All commands from bash are not available but you can create function,
variable (no array), use if .. then, elif ... then, else, fi and for
.. in.. do .. done, while, until ... $#, $@, $* and so on
it's very powerful.
for example, if requires single [ ... ] not [[ ... ]], "or" "and"
operators are not && || but "-o" "-a".
See "6.3 Writing full configuration files directly" in Grub manual for
more information.
https://www.gnu.org/software/grub/manual/grub/grub.html
Some module as regexp, tr, ... can be loaded if you need additional
command.
About ntfs you will need to load ntfs module (+reqs if needed)
You have a really interresting file inside
/boot/grub/${arch}/moddep.lst which list all required dependencies for
each module.
About searching a file you will need the search module which will
return the root of drive if file is found. you can search file system
uuid or file system label if you want.
eg: search --file [--set=root] /path/win.txt
will return the root of drive if absolute path /path/win.txt is found;
else nothing
([--set=root] if not specified, root variable is used but you can use
another variable to get result and test if variable exists or not)
search --file --set=winroot "/path/win.txt"
if [ -n "${winroot}" ]; then
echo "root found"
set root="${winroot}"
set prefix=
...
else
echo "oops no windows"
fi
or this work too
if search --file --set=winroot "/path/win.txt"; then
echo "windows root found"
set root="${winroot}"
set prefix=
...
elif search --file --set=linroot "/boot/grub/grub.cfg"; then
echo "oops no windows but linux"
set root="${linroot}"
set prefix=
..
else
echo "oops nothing found :("
fi
Here is the manual with all command.
https://www.gnu.org/software/grub/manual/grub/grub.html#search
Hope this help.
Regards
Hans
Le samedi 24 avril 2021 à 02:50:07 UTC+2, Jarek
<jarekvxm@jarek.vxm.pl> a écrit :
Hi!
I want to check if specific file (let's say win.txt) exist in root
directory at ntfs WIndows partition and if does, then boot Windows (or
better: make it default choice but still display menu and timeout), and
if not boot Linux (or leave default menu with default Linux and
timeout). I've seen command test -e file and insmod ntfs, but I don't
know what next. Does "grub works" like shell scripts? Are entries from
grub.cfg are just interpreted and executed from top to bottom or is it
compiled on update?
Jarek