Création d'une entrée de menu personnalisée, coincé sur cette commande:
exec tail -n +3 $0
Je l'ai essayé dans le terminal, j'ai obtenu un résultat étrange, je ne peux pas comprendre ce que fait exactement cette commande et pourquoi grub en a besoin. Pourriez-vous expliquer, s'il vous plaît?
#
s'agit d'un caractère de commentaire pour grub anway,#!/bin/cat
devrait également fonctionner. (Vous aurez cependant la ligne de commentaires shebang dans la sortie.)Si vous parlez de
/etc/grub.d/40_custom
:Notez ensuite que:
grub-mkconfig
pour construire la configuration GRUBMais ceci est un script shell, donc vous devez généralement faire quelque chose comme
echo "menuentry ...."
etc. Pour éviter cela, laexec tail
magie est utilisée. Qu'est-ce que ça fait?$0
, rappelez-vous, est le nom du script tel qu'il est exécuté, il le serait donc généralement40_custom
(ou/etc/grub.d/40_custom
, etc., selon l'endroit et la manière dont il a été exécuté). Ainsi, le script s'exécute essentiellementtail
sur lui-même, mais avec-n +3
, qui indiquetail
de commencer à partir de la troisième ligne.Qu'obtenez-vous si vous sortez tout à partir de la troisième ligne
/etc/grub.d/40_custom
?(Et en plus de tout ce que vous mettez en dessous.)
La
exec
partie remplace le shell qui exécute le scripttail
, donc rien de plus éloigné du script n'est exécuté.L'exécuter dans le terminal:
$0
est probablementbash
ou quelque chose comme ça (ça pourrait être/bin/bash
)exec
, vous remplacez le shell en cours d'exécution partail -n+3 bash
bash
dans votre répertoire actuel,tail
quittez rapidement.Le résultat final est donc probable que votre session de terminal se soit terminée là.
la source