Cosa significa %% nel nome di una funzione?


11

Osservando l'output di env, ho notato che esiste anche la seguente funzione.

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

Il contenuto del file /usr/share/mc/mc-wrapper.sh è il seguente.

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

Cosa significano i %%caratteri nel nome della funzione? La rendono la funzione invocata in casi specifici o mi consente di chiamarla in modo diverso dalle altre funzioni?

Sto usando openSUSE 42.3, con la versione 4.3.42 (1) di Bash (x86_64-suse-linux-gnu), se questo fa la differenza.

Risposte:


15

Il nome della funzione è stato creato da bashaggiornato come risposta alla vulnerabilità dello shellshock .

C'era una funzione chiamata mcche è stata esportata e la tua bashversione la sta rinominando anteponendo BASH_FUNC_e sostituendo ()da %%.

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

Ecco la bashpatch di Florian Weimer che ha introdotto questa correzione, datata 25 settembre 2014:

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

Si noti che un nome di funzione può contenere quasi tutti i caratteri bashproprio come un nome di comando in generale (cioè un nome di file), quindi %%è sicuramente valido qui.


3

Sembra che bash sia abbastanza felice di usare% caratteri nei nomi delle funzioni:

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

mentre ad esempio trattino non piacciono:

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

Per quanto ne so, %% non ha alcun significato speciale nel nome di una funzione bash. Sarebbe come usare XX invece. Questo nonostante la definizione di a namenella manpage:

   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.

Ma dopo c'è un =segno uguale %%! Che causa l'incarico lì.
αғsнιη,

2
È così che è stata envstampata la definizione della funzione.
Odino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.