gpt4 book ai didi

perl - 为什么 perltidy 要进入标准输出?

转载 作者:行者123 更新时间:2023-12-03 18:43:04 25 4
gpt4 key购买 nike

我有一个 bash 命令,get-modified-perl-files ,它返回我在我的存储库中修改的所有 Perl 文件。我想对所有这些文件使用 perltidy。
我创建了一个 bash 函数来完成这项工作:

tidy() {
for f in `get-modified-perl-files`
do
echo $f
perltidy -b $f
done
}
根据 perltidy 的帮助页面,-b 选项应该创建我的原始文件的备份并就地修改它:

-b backup original to .bak and modify file in-place


但是,当我启动我的 bash 功能时,没有创建备份。我的文件没有被修改,但是 perltidy 的输出打印在标准输出上。因此,我决定以这种方式更改对 perltidy 的调用:
\cp $f $f.bak
perltidy $f > $f
现在,当我运行我的命令时,我的文件备份正确完成,但原始文件被清空,并显示以下消息:

skipping file: file.pl: Zero size


我找到了一种解决方法,可以给出我想要的结果,但似乎有些牵强:
\cp -f $f $f.bak
echo "$(perltidy $f)" > $f
为什么 -b 选项不起作用?有没有办法在不使用这种奇怪的重定向的情况下完成同样的工作?

编辑:这是我的 .perltidyrc文件:
--perl-best-practices
--no-standard-error-output
--closing-side-comments
--closing-side-comment-interval=10
--blanks-before-subs
--blanks-before-blocks
--maximum-line-length=130

最佳答案

perltidy $f > $f


对于任何程序,这永远不会做你想做的事。当您使用 > $f 运行程序时,它告诉 shell 你希望程序在其标准输出连接到 $f 的情况下运行.所以在程序运行之前,shell 打开 $f用于写入,这会破坏文件的内容。然后它将句柄连接到子进程的标准输出,然后运行 ​​perltidy,它试图读取 $f并发现……什么都没有,因为原来的内容已经被抹掉了。不是成功的秘诀。这就是为什么 perltidy 首先拥有自己的“就地编辑”功能。

关于perl - 为什么 perltidy 要进入标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66471959/

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