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/cat
deberí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-mkconfig
para 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 tail
se 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 esencialmentetail
en sí mismo, pero con-n +3
, que le indicatail
que 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
exec
parte 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:
$0
es probablementebash
o algo así (podría ser/bin/bash
)exec
eso, estás reemplazando el shell contail -n+3 bash
bash
en su directorio actual,tail
salga rápidamente.Por lo tanto, el resultado final es probable que su sesión de terminal haya terminado allí.
fuente