Was bedeutet %% in einem Funktionsnamen?

11

Beim Betrachten der Ausgabe von habe envich festgestellt, dass es auch die folgende Funktion gibt.

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

Der Inhalt der Datei /usr/share/mc/mc-wrapper.sh lautet wie folgt.

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

Was bedeuten die %%Zeichen im Funktionsnamen? Machen sie es zur Funktion, die in bestimmten Fällen aufgerufen wird, oder erlauben sie mir, es anders als andere Funktionen aufzurufen?

Ich verwende openSUSE 42.3 mit Bash Version 4.3.42 (1) -release (x86_64-suse-linux-gnu), wenn dies einen Unterschied macht.

kiamlaluno
quelle

Antworten:

15

Der Funktionsname wurde von bashaktualisiert als Reaktion auf die Shellshock- Sicherheitsanfälligkeit erstellt.

Es wurde eine Funktion namens mcexportiert, die von Ihrer bashVersion durch Voranstellen BASH_FUNC_und Ersetzen ()durch umbenannt wird %%.

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

Hier ist der bashPatch von Florian Weimer, der dieses Update vom 25. September 2014 eingeführt hat:

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

Beachten Sie, dass ein Funktionsname fast alle Zeichen enthalten kann, bashgenau wie ein Befehlsname im Allgemeinen (dh ein Dateiname), sodass er %%hier definitiv gültig ist.

jlliagre
quelle
3

Es scheint, dass bash sehr gerne% Zeichen in Funktionsnamen verwendet:

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

während zB Dash sie nicht mag:

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

Soweit ich das beurteilen kann, hat %% in einem Bash-Funktionsnamen keine besondere Bedeutung. Es wäre so, als würde man stattdessen XX verwenden. Dies ist trotz der Definition von a namein der 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.
Wodin
quelle
Aber gibt es ein gleiches =Zeichen gibt nach %%! Was dort Zuordnung verursacht.
αғsнιη
2
So wurde envdie Funktionsdefinition gedruckt.
Wodin