ZSH Magic适用于某些退出状态

时间:2012-02-08 03:56:23

标签: perl zsh

嘿我想在某些情况下编写一个提示我的函数(perl有一个糟糕的退出状态,它打印的警告以“无法在@INC中找到 * ”开头)运行命令。

你认为这是可行的吗?

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

接下来的事情是:我想我可能不得不用preexec做一些技巧来捕捉stderr的第一行(如果这不起作用那不是一个大问题,但无论如何都会很有趣),我想到了附加2>管道或东西,但我不知道如何在第一个地方建造管道。但如上所述,这是一个小问题。

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

从我到现在为止的一个答案,我想我可以稍微缩小问题:

是否可以围绕perl脚本包装MULTIOS重定向? (我想到了一些特殊的执行官,但没想出任何有效的执行官)

1 个答案:

答案 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?

等语言层面做点什么