2013-07-17 23 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個字符;不需要產生一個殼。 –

相關問題