如何让Perl命令遇缺失文件时继续执行且返回非0退出码?
解决方案
要让Perl实现和cat一样的行为——遇到缺失文件时继续处理后续文件,最终返回非0退出码,可以通过逐个检查文件、记录错误状态、最后统一设置退出码来实现,具体命令如下:
perl -p -i -e 'BEGIN { $has_error = 0 } if (!-f $ARGV) { warn "No such file: $ARGV\n"; $has_error = 1; next } s/foo/bar/; END { exit $has_error }' non-existent-file.txt existent-file.txt
代码解释:
BEGIN { $has_error = 0 }:程序启动时初始化错误标记,默认无错误if (!-f $ARGV):每次处理新文件前,检查当前文件是否为普通文件(如果只需检查文件是否存在,可把-f换成-e)warn "No such file: $ARGV\n":打印错误信息但不终止程序(这是和die的核心区别)$has_error = 1:标记出现过错误next:跳过当前缺失文件的处理,直接进入下一个文件的循环
s/foo/bar/:你的文本替换逻辑,正常处理存在的文件END { exit $has_error }:程序结束时,根据错误标记设置退出码——有错误返回1,无错误返回0
效果验证:
执行上述命令时,会先打印non-existent-file.txt的错误提示,然后正常处理existent-file.txt,最后命令返回非0退出码(可通过echo $?查看退出码),完全符合cat的行为逻辑。
内容的提问来源于stack exchange,提问作者Mario Palumbo
相关产品推荐
相关产品推荐

