コマンド置換によって提供される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
リストが空の場合、ユーティリティは実行されません。
これは3つの問題を解決します。
\0
パス名を--区切りリストとして渡すことで、名前に改行やその他のスペースを含むファイルをサポートします。pylint
パイプで可能な限り最大のファイルバッチを読み取って実行することで、大量のデータが生成され、「引数リストが多すぎる」ためgit ls-files
にコマンド置換の使用が失敗する状況を処理できます。pylint
リストが空の場合は実行されません。
この回答では、xargs
非標準(ただし一般的な)オプションsumを使用する実装-0
を想定しています-r
。