Que signifie %% dans un nom de fonction?

11

En regardant la sortie de env, j'ai remarqué qu'il y a aussi la fonction suivante.

BASH_FUNC_mc%%=() {  . /usr/share/mc/mc-wrapper.sh
}

Le contenu du fichier /usr/share/mc/mc-wrapper.sh est le suivant.

MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
        MC_PWD="`cat "$MC_PWD_FILE"`"
        if test -n "$MC_PWD" && test -d "$MC_PWD"; then
                cd "$MC_PWD"
        fi
        unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE

Que %%signifient les caractères dans le nom de la fonction? En font-ils la fonction invoquée dans des cas spécifiques, ou me permettent-ils de l'appeler différemment des autres fonctions?

J'utilise openSUSE 42.3, avec la version Bash 4.3.42 (1) -release (x86_64-suse-linux-gnu), si cela fait une différence.

kiamlaluno
la source

Réponses:

15

Le nom de la fonction a été créé par bashmis à jour en réponse à la vulnérabilité shellshock .

Il y avait une fonction nommée mcqui a été exportée et votre bashversion la renomme en ajoutant BASH_FUNC_et en remplaçant ()par %%.

$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date

Voici le bashpatch de Florian Weimer qui a introduit ce correctif, daté du 25 septembre 2014:

http://seclists.org/oss-sec/2014/q3/att-693/variables-affix.patch

Notez qu'un nom de fonction peut contenir presque tous les caractères, bashtout comme un nom de commande en général (c'est-à-dire un nom de fichier), il %%est donc certainement valide ici.

jlliagre
la source
3

Il semble que bash soit assez content d'utiliser% caractères dans les noms de fonctions:

bash$ TEST%%() { echo test; }
bash$ TEST%%
test

alors que, par exemple, dash ne les aime pas:

$ TEST%%() { echo test; }
dash: 1: Syntax error: Bad function name

Donc pour autant que je sache, %% n'a pas de signification particulière dans un nom de fonction bash. Ce serait comme utiliser XX à la place. Ceci malgré la définition de a namedans la page de manuel:

   name   A word consisting only of  alphanumeric  characters  and  under-
          scores,  and beginning with an alphabetic character or an under-
          score.  Also referred to as an identifier.
Wodin
la source
Mais il y a un =signe égal là-bas après %%! Ce qui provoque une affectation là-bas.
αғsнιη
2
C'est ainsi que envla définition de la fonction a été imprimée.
Wodin