Apa arti %% dalam nama fungsi?

11

Melihat output env, saya perhatikan ada juga fungsi berikut.

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

Isi file /usr/share/mc/mc-wrapper.sh adalah sebagai berikut.

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

Apa arti %%karakter dalam nama fungsi? Apakah mereka menjadikannya fungsi yang dipanggil dalam kasus tertentu, atau apakah mereka mengizinkan saya untuk memanggilnya secara berbeda dari fungsi lain?

Saya menggunakan openSUSE 42.3, dengan Bash versi 4.3.42 (1) -release (x86_64-suse-linux-gnu), jika itu membuat perbedaan.

kiamlaluno
sumber

Jawaban:

15

Nama fungsi dibuat dengan bashdiperbarui sebagai respons terhadap kerentanan shellshock .

Ada fungsi bernama mcyang diekspor dan bashversi Anda mengganti nama dengan menambahkan BASH_FUNC_dan mengganti ()dengan %%.

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

Berikut adalah bashtambalan oleh Florian Weimer yang memperkenalkan perbaikan ini, tertanggal 25 September 2014:

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

Perhatikan bahwa nama fungsi dapat berisi hampir semua karakter bashseperti nama perintah secara umum (yaitu nama file) jadi %%sudah pasti berlaku di sini.

Jlliagre
sumber
3

Tampaknya bash cukup senang menggunakan% karakter dalam nama fungsi:

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

sedangkan eg dash tidak menyukainya:

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

Sejauh yang saya tahu, %% tidak memiliki arti khusus dalam nama fungsi bash. Ini akan seperti menggunakan XX saja. Ini terlepas dari definisi a namedi manual:

   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
sumber
Tapi =setelah itu ada tanda yang sama %%! Yang menyebabkan penugasan di sana.
αғsнιη
2
Begitulah cara envmencetak definisi fungsi.
Wodin