2012-02-08 27 views
1

嘿我想过编写一个函数,在某些情况下提示我(perl的退出状态不正确,并且它打印的警告以“ININ中无法找到*”开始)也许重新运行该命令。ZSH Magic对于某些退出状态

你觉得这是feasable?

我发现TRAPZERR功能。但我不甚至在那里得到的最后一个命令的名称,只有最后一个参数,所以具体的一点是:我怎样才能得到命令名?!!:0不起作用。

接下来的事情是:我想我可能需要用preexec来捕捉stderr的第一行(如果这不起作用,这不是一个大问题,但它会很有趣),我想要追加一个2>到管道或其他东西,但我不知道如何获得在第一个地方建造的管道。但如上所述,这是一个小问题。

但是真的,如果你认为:没有这个任务是不可能的!请告诉我(虽然我会感兴趣为什么)。

从一个答案我有到现在为止,我认为我可以缩小问题一点:

是否有可能缠绕在perl脚本一个MULTIOS重定向? (我想过一些特殊的exec,但想出了没有工作)

回答

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?

+0

感谢,我会尝试一下!不,我绝对不希望它在语言层面上,这是整个观点,我想查询自己,如果我想cpaninstall模块,而不是在编译时检查。 – 2012-02-08 14:03:28

+0

但为什么不使用TRAPZERR,对我来说似乎更合理,因为它只在程序退出状态不佳时才执行。 – 2012-02-08 14:22:13