Suj*_*dke 6 linux perl return-value
我使用命令行perl在文件中执行就地替换.这是代码:(注意带sudo的root perm)
sudo perl -i -pe "s/foo/bar/" config.txt
Run Code Online (Sandbox Code Playgroud)
如果成功,'echo $?' 返回0.现在我使用chattr这样的文件使文件不可写,即使对于root:
sudo chattr +i config.txt
Run Code Online (Sandbox Code Playgroud)
我运行相同的perl命令,它失败并出现此错误:
无法删除config.txt:不允许操作,跳过文件.
哪个好.但是,'echo $?' 在这种情况下仍然返回0.为什么会这样?它不应该返回表示错误的非零值吗?
问题是 Perl 在这种情况下不会返回非零退出状态(sudo传递所给命令的退出状态),这有点令人烦恼。您可以通过认识到如果文件无法重命名并使用标志处理它则永远不会进入行读取循环来解决该问题:
sudo perl -i -ne 's/foo/bar/; print; $wrk = 1; }{ $wrk or exit 1' config.txt
Run Code Online (Sandbox Code Playgroud)
爱斯基摩人的问候(或蝴蝶)“操作员”在某种程度上}{引入了一个块;END当从文件中读取行的循环结束时执行它之后会发生什么。这里描述了它的工作方式。
config.txt需要注意的是,如果为空,也会报告错误。一种更短但更黑客的方法是使用特殊的$.行计数器变量来达到相同的目的:
sudo perl -i -ne 's/foo/bar/; print; }{ $. or exit 1' config.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |