%% işlev adında ne anlama geliyor?


11

Çıktılarına baktığımda env, aşağıdaki fonksiyonun da olduğunu fark ettim.

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

/Usr/share/mc/mc-wrapper.sh dosyasının içeriği şöyledir.

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

%%İşlev adındaki karakterler ne anlama geliyor? Belirli durumlarda çağrılan işlevi yapıyorlar mı yoksa diğer işlevlerden farklı olarak çağırmamı sağlıyorlar mı?

Herhangi bir fark yaratırsa, Bash sürüm 4.3.42 (1) -release (x86_64-suse-linux-gnu) ile openSUSE 42.3 kullanıyorum.

Yanıtlar:


15

İşlev adı, kabuk vuruşu güvenlik açığına bashbir yanıt olarak güncelleştirilerek hazırlandı .

Adında bir işlev yoktu mcihraç edildi ve bu bashversiyon prepending bunu yeniden adlandırma olduğunu BASH_FUNC_ve değiştirilmesi ()yoluyla %%.

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

İşte bash25 Eylül 2014 tarihli Florian Weimer tarafından geliştirilen bu düzeltme eki:

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

Bir işlev adının, bashgenel olarak bir komut adı (yani bir dosya adı) gibi hemen hemen tüm karakterleri içerebileceğine dikkat edin %%, burada kesinlikle geçerlidir.


3

Görünüşe göre bash, işlev adlarında% karakterleri kullanmaktan oldukça memnun:

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

oysa örneğin çizgi onları beğenmez:

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

Bu yüzden, söyleyebildiğim kadarıyla, %% bir bash işlev adında özel bir anlamı yok. Bunun yerine XX kullanmak gibi bir şey olurdu. Bu, nameman sayfasındaki a tanımına rağmen :

   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.

Ama orada eşit bir =işaret var %%! Bu da orada atamaya neden oluyor.
αғsнιη

2
Bu sadece nasıl envişlev tanımı baskılı.
Wodin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.