【问题标题】:ZSH Magic for certain exit-status situationsZSH Magic 用于某些退出状态的情况
【发布时间】:2012-02-29 13:18:04
【问题描述】:

嘿,我考虑编写一个函数,在某些情况下提示我(perl 的退出状态不好,它打印的警告以“Could not find * in @INC”开头)可能重新运行命令。

你认为这可行吗?

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

接下来的事情是:我想我可能不得不用 preexec 做一些技巧来捕捉 stderr 的第一行(如果这不起作用,那不是一个大问题,但无论如何它会很有趣),我想将 2> 附加到管道或其他东西上,但我不确定如何首先构建该管道。但如上所述,这是一个小问题。

但实际上,如果您认为:不,这项任务是不可能的!请告诉我(尽管我很想知道为什么)。

从我得到的一个答案到现在,我认为我可以缩小问题范围:

是否可以在 perl 脚本周围包装 MULTIOS 重定向? (我想了一些特殊的 exec,但没有想出一个可行的方法)

【问题讨论】:

    标签: perl zsh


    【解决方案1】:

    这是一个开始。

    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?

    【讨论】:

    • 谢谢,我试试看!不,我绝对不希望它在语言级别上,这就是重点,我想询问自己是否要 cpaninstall 模块,而不是在编译时进行一些检查。
    • 但是你为什么不使用 TRAPZERR,对我来说似乎更合理,因为它只有在程序的退出状态不好时才会执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多