我有以下代码可以pylint
在 Git 存储库中文件扩展名为 的所有文件上运行.py
,由命令替换提供。
pylint $(git ls-files '*.py')
除非没有与模式匹配的文件,否则脚本运行得很好。但是,pylint
当在没有文件的情况下调用该实用程序时,该实用程序会给出详细的帮助消息,这不是我想要的 - 我pylint
根本不想调用。
那么,我可以寻求一些帮助,了解如何在调用之前最好地测试是否有任何文件与文件名模式匹配pylint
?
我是一个pylint
新手bash
。
答案1
根本不要使用命令替换。相反,使用管道将数据传递给git ls-files
,并在生成的文件列表上运行:xargs
xargs
pylint
git ls-files -z '*.py' | xargs -0 -r pylint
git
这会将命令中的文件列表xargs
作为\0
- 分隔列表传递。该xargs
实用程序将pylint
使用从 读取的名称运行git
,但使用 时-r
,如果列表为空,则它不会运行该实用程序。
这解决了三个问题:
- 通过将路径名作为
\0
- 分隔列表传递,它支持名称包含换行符和其他空格的文件。 - 通过从管道读取并运行
pylint
尽可能大批量的文件,我们能够处理git ls-files
生成大量数据而使用命令替换会因“参数列表太长”而失败的情况。 pylint
如果列表为空,则不会运行。
这个答案假设使用xargs
具有非标准(但常见)选项-0
和 的实现-r
。