嘿我想在某些情况下编写一个提示我的函数(perl有一个糟糕的退出状态,它打印的警告以“无法在@INC中找到 * ”开头)运行命令。
你认为这是可行的吗?
我发现TRAPZERR
功能。但我甚至没有得到最后一个命令的名称,只有最后一个参数,所以一个具体点是:我怎样才能得到命令名呢? !!:0
不起作用。
接下来的事情是:我想我可能不得不用preexec做一些技巧来捕捉stderr的第一行(如果这不起作用那不是一个大问题,但无论如何都会很有趣),我想到了附加2>管道或东西,但我不知道如何在第一个地方建造管道。但如上所述,这是一个小问题。
但实际上,如果你认为:没有这个任务是不可能的!请告诉我(虽然我会感兴趣为什么)。
从我到现在为止的一个答案,我想我可以稍微缩小问题:
是否可以围绕perl脚本包装MULTIOS重定向? (我想到了一些特殊的执行官,但没想出任何有效的执行官)
答案 0 :(得分:2)
这是一个开始。
preexec() {
lastcommand=$1
exec 3>&1 4>&2
exec 2> >(tee /tmp/output 1>&4)
}
precmd() {
read line </tmp/output
case "$line" in
"Can't locate"*)
echo "Perl module missing running $lastcommand"
;;
esac
}
但也许你想在How can I hook into Perl's use/require so I can throw an exception?
等语言层面做点什么