Perl 佩尔蒂为什么要去斯都特?
我有一个bash命令,Perl 佩尔蒂为什么要去斯都特?,perl,perl-tidy,Perl,Perl Tidy,我有一个bash命令,getmodifiedperlfiles,它返回我在存储库中修改过的所有perl文件。我想对所有这些文件使用perltidy 我创建了一个bash函数来完成这项工作: tidy(){ 对于f,在'get modified perl文件中` 做 回声$f perltidy-b$f 完成 } 根据perltidy的帮助页面,-b选项应创建我的原始文件的备份,并对其进行适当修改: -b将原始文件备份到.bak并就地修改文件 但是,当我启动bash函数时,不会创建备份。我的文件不
getmodifiedperlfiles
,它返回我在存储库中修改过的所有perl文件。我想对所有这些文件使用perltidy
我创建了一个bash函数来完成这项工作:
tidy(){
对于f,在'get modified perl文件中`
做
回声$f
perltidy-b$f
完成
}
根据perltidy的帮助页面,-b选项应创建我的原始文件的备份,并对其进行适当修改:
-b将原始文件备份到.bak并就地修改文件
但是,当我启动bash函数时,不会创建备份。我的文件不会被修改,但perltidy的输出会打印在标准输出上。因此,我决定将我的电话改为perltidy:
\cp$f$f.bak
perltidy$f>$f
现在,当我运行命令时,文件的备份已正确完成,但原始文件已清空,并显示以下消息:
正在跳过文件:file.pl:零大小
我已经找到了一种解决方法,可以提供我想要的结果,但似乎有些牵强:
\cp-f$f$f.bak
回显“$(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
默认情况下,不会将文件内容打印到标准输出。为此,需要使用-st
选项(或--standard output
)。由于您没有在perltidy
命令行上使用此选项,因此可能有一个.perltidyrc
文件正在使用,其中包含-st
要忽略.perltidyrc
文件,请使用-npro
(-noprofile
)选项:
请参阅手册页的“使用.perltidyrc命令文件”部分,了解您的安装版本:
perldoc perltidy
有关其他调试信息,您可以运行:
perltidy -dpro
perltidy -dop
另一种可能是将
perltidy
命令别名为perltidy-st
。您应该能够避免使用以下别名:
\perltidy -npro -b $f
现在,您编辑了问题以显示
.perltidyrc
文件,罪魁祸首似乎是:
--perl-best-practices
更改rc文件,或者如上所述忽略它
另见
perltidy$f>$f
这将永远不会做你想要的,任何程序。使用
$f
运行程序时,这会告诉shell您希望程序在其标准输出连接到$f
的情况下运行。因此,在程序运行之前,shell会打开$f
进行写入,这会破坏文件的内容。然后它将句柄连接到子对象中的stdout,然后运行perltidy,它尝试读取$f
,并找到。。。没有,因为原来的内容已经被删除了。这不是成功的秘诀。这就是为什么perltidy首先有自己的“就地编辑”功能。对于不提供就地编辑的实用程序,海绵
实用程序非常有用<代码>程序文件>文件可以使用程序文件|海绵文件
解决。这是
--perl-best-practices