gpt4 book ai didi

linux - 当隐式打开失败时需要 perl 死掉

转载 作者:行者123 更新时间:2023-12-03 00:26:23 26 4
gpt4 key购买 nike

我正在尝试将 sed 脚本迁移到 Perl 单行脚本,因为 Perl 支持非贪婪正则表达式。我接受了 Non greedy (reluctant) regex matching in sed? 的建议和 Why is my Perl in-place script exiting with a zero exit code even though it's failing?

如果无法打开文件,我需要我的 oneliner 以非零状态退出。

不幸的是,检查 -f $ARGV[0] 并不可靠,因为该文件可能存在但仍然无法访问。

一个想法是添加一些 Perl 代码以在命令行中的所有文件之间执行,但我找不到。 END 执行一次,如果最后一个文件成功,那么它不会知道前面的文件失败。

touch aaa.txt
chmod 000 aaa.txt
perl -i -pe 'BEGIN { -f $ARGV[0] or die "fatal: " . $!; }' aaa.txt; echo $?

_

Can't open aaa.txt: Permission denied.
0

最佳答案

Can't open ...文字是警告。您可以使用$SIG{__WARN__}捕获它信号处理程序。

您应该收到的唯一警告来自隐式 <> -p 提供的循环中的运算符切换你可以像这样重写你的代码

perl -i -pe 'BEGIN { $exit = 0; $SIG{__WARN__} = sub { $exit = 1; warn @_} } END { $? = $exit}' aaa.txt; echo $?

这组 $exit在脚本开头将其设置为 0,如果出现警告则将其设置为 1。 END block 分配值 $exit$?这将是脚本结束后的退出代码。

关于linux - 当隐式打开失败时需要 perl 死掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com