出力を見ると、env
次の関数もリストされていることがわかりました。
BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh }
/usr/share/mc/mc-wrapper.sh ファイルの内容は次のとおりです。
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
%%
関数名の文字はどういう意味ですか?特定の状況で呼び出される関数として作成しますか?それとも他の関数とは異なる呼び出しを許可しますか?
違いがある場合は、Bashバージョン4.3.42(1)-リリース(x86_64-suse-linux-gnu)でOpenSUSE 42.3を使用しています。
ベストアンサー1
関数名は、bash
ペアで更新によって慎重に作成されます。シェルショック脆弱性。
mc
エクスポートという名前の関数がありますが、バージョンbash
で前に追加してにBASH_FUNC_
変更して()
名前を変更しています%%
。
$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date
以下は、bash
2014年9月25日にFlorian Weimerが導入したパッチです。
http://seclists.org/oss-sec/2014/q3/att-693/variables-affix.patch
関数名には、bash
通常のコマンド名(ファイル名など)と同様に、ほぼすべての文字を含めることができるため、%%
ここでは絶対に有効です。