【发布时间】:2014-03-05 08:28:03
【问题描述】:
我有一个单行 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
我做错了吗?我应该修改我的脚本,还是我调用 Perl 的方式?我天真地假设因为 Perl 找不到该文件,它会以非零代码退出。
【问题讨论】:
-
Perl 在无法打开文件时不会自动退出。那个衬里是一个真正的 Perl 脚本,所以当涉及到打开时,它只是试图打开文件。它不能,因此写入 STDERR,但它不知道脚本的其余部分是否还有其他事情要做,所以它继续。在这种情况下,没有什么可做的,因为它只会遍历文件的行。因此它在脚本结束时正常完成,返回零。如果您希望您的脚本带有一些特定的错误代码
die或exit,您必须将其添加到脚本中。