我有一個班輪Perl的搜索和替換,看起來大致是這樣的:爲什麼即使失敗,我的Perl就地腳本仍然以零退出代碼退出?
perl -p -i -e 's/foo/bar/' non-existent-file.txt
因爲文件不存在(這是不是故意的,但是這是一個自動化構建腳本的一部分,所以我想防止的是),Perl的退出與此錯誤:
Can't open non-existent-file.txt: No such file or directory.
然而,退出代碼仍然是零:
echo $?
0
我做得WR翁?我應該修改我的腳本還是我調用Perl的方式?我天真地認爲,因爲Perl找不到該文件,它將以非零代碼退出。
Perl在無法打開文件時不會自動退出。這一行是Perl的真正腳本,所以當涉及到打開時,它只是試圖打開文件。它無法寫入STDERR,因此無法知道腳本的其餘部分是否還有別的事情要做,因此它只是繼續。在這種情況下,沒有別的辦法了,因爲它只是循環遍歷文件的行。因此它通常在腳本結束時返回零。如果你想讓你的腳本「死」或「退出」一些特定的錯誤代碼,你必須將其添加到腳本。 – DeVadder