2012-02-08 112 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