apa*_*rno 11 bash shell-script environment-variables function
查看 的输出env
,我注意到还有以下函数。
BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh
}
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
%%
函数名中的字符是什么意思?它们是在特定情况下调用的函数,还是允许我以与其他函数不同的方式调用它?
我正在使用 openSUSE 42.3 和 Bash 版本 4.3.42(1)-release (x86_64-suse-linux-gnu),如果这有什么不同的话。
jll*_*gre 15
函数名称是bash
为了响应shellshock漏洞而更新的。
有一个名为的函数mc
被导出,您的bash
版本正在通过添加BASH_FUNC_
和替换()
来重命名它%%
。
$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date
Run Code Online (Sandbox Code Playgroud)
这是bash
Florian Weimer 于 2014 年 9 月 25 日发布的补丁,该补丁引入了此修复程序:
http://seclists.org/oss-sec/2014/q3/att-693/variables-affix.patch
请注意,函数名称几乎可以包含任何字符,bash
就像一般的命令名称(即文件名)一样,因此%%
在这里绝对有效。