2013-07-17 24 views
1

在Perl,%ENV可以访问环境:如何确定环境条目是否是bash函数?

e='() { echo This is not a func 
}' 
d() { echo This is a func 
} 
export e 
export -f d 
perl -e 'print $ENV{"d"},"\n",$ENV{"e"},"\n"' 

但我还没有找到一种方法来告诉dË是一个bash的功能。我如何从Perl中做到这一点?

回答

2

内置的shell type -t将返回字符串function

perl -e 'print qx(bash -c "type -t e")' 
+0

上面的命令给出'function'。但'e'不是一个函数。 –

+0

对于外壳,它是。一旦函数体被序列化到环境中,它就变成了一个单纯的字符串,与普通字符串无法区分。实际上,'perl -e'print qx(bash -c“e”)''会运行并回显'这不是func'。你发现了一个边缘案例,启发式不符合你的期望,处理它。 – daxim

+0

进一步分析,似乎边缘情况是,如果变量以'(){'开头,那么它被视为一个函数 - 无论它是否为函数(例如结尾)可能会丢失)。这意味着我可以简单地查找'(){'作为前4个字符;不需要产生一个壳。 –

相关问题