Al crear una entrada de menú personalizada, se atascó en este comando:
exec tail -n +3 $0
Lo probé en la terminal, obtuve un resultado extraño, no puedo entender qué hace exactamente este comando y por qué grub lo necesita. ¿Podría explicar, por favor?

#es un personaje de comentario para grub anway, también#!/bin/catdebería funcionar. (Sin embargo, tendrá la línea de comentarios shebang en la salida).Si estás hablando de
/etc/grub.d/40_custom:Entonces tenga en cuenta que:
grub-mkconfigpara construir la configuración de GRUBPero este es un script de shell, por lo que normalmente tendrías que hacer algo como
echo "menuentry ...."etc. Para evitar eso,exec tailse usa la magia. Que hace eso$0, recuerde, es el nombre de la secuencia de comandos ejecutada, por lo que normalmente sería40_custom(o/etc/grub.d/40_custom, etc., dependiendo de dónde y cómo se ejecutó). Entonces, el script se ejecuta esencialmentetailen sí mismo, pero con-n +3, que le indicatailque comience desde la tercera línea.¿Qué obtienes si envías todo desde la tercera línea en adelante
/etc/grub.d/40_custom?(Y además, cualquier otra cosa que ponga debajo de esto).
La
execparte reemplaza el shell con el que se ejecuta el scripttail, por lo que efectivamente no se ejecuta nada más lejos del script.Ejecutándolo en la terminal:
$0es probablementebasho algo así (podría ser/bin/bash)execeso, estás reemplazando el shell contail -n+3 bashbashen su directorio actual,tailsalga rápidamente.Por lo tanto, el resultado final es probable que su sesión de terminal haya terminado allí.
fuente