【发布时间】:2017-01-04 10:00:19
【问题描述】:
我有几个逻辑 AND 命令,中间是一个就地编辑文件的 perl 命令。
echo before && \
perl -pe 's/foo/bar/g' -i qux && \
echo after
如果文件不存在,perl 会报“Can't open qux: No such file or directory”。但是错误代码是 0。这是一个问题,因为我不希望命令继续。换句话说,如果文件不存在,则不应打印“之后”。为什么会发生这种情况,我该如何阻止它?
【问题讨论】:
-
你可以
echo before && test -f qux && ... -
@dsm 是的,这似乎是一个很好的解决方法,谢谢
-
解释器 (Perl) 返回到 shell,而不是它执行的(单行)程序。除了成功 (0) 之外,它没有理由返回任何内容。如果您要调用脚本而不是单行代码,则可以使用
exit 1。 -
另一点——输入循环是作为
-p的一部分设置的,因此没有文件是未捕获的异常,您无法控制发生的情况。你可以放弃它,比如perl -e '-f qux || exit 1; ...',然后它会按预期工作。但是当然你必须自己设置while(<>) { ... },事情变得笨拙。 -
@zdim 我很好奇有什么原因我不能这样做
$SIG{__DIE__} = sub {exit 1};我只是尝试设置一段时间()并且没有调用 die 信号处理程序
标签: perl