コマンド置換の結果が空の場合は、コマンドを実行しないでください。

コマンド置換の結果が空の場合は、コマンドを実行しないでください。

コマンド置換によって提供されるpylintGitリポジトリのファイル拡張子を持つすべてのファイルで実行される次のコードがあります。.py

pylint $(git ls-files '*.py')

パターンに一致するファイルがない場合、スクリプトは正常に実行されます。ただし、pylintファイルなしでユーティリティを呼び出すと、ユーティリティは詳細なヘルプメッセージを表示しますが、これは私が望むものではありませんpylint。まったく呼び出したくありません。

それでは、ファイルを呼び出す前にファイル名パターンに一致するファイルがあるかどうかをテストするための最良の方法について助けることができますかpylint

私はpylint初心者ですbash

ベストアンサー1

コマンド置換をまったく使用しないでください。代わりにデータをにパイプgit ls-filesし、結果ファイルのリストから実行します。xargsxargspylint

git ls-files -z '*.py' | xargs -0 -r pylint

gitこれにより、コマンドのファイルリストが区切りリストxargsに渡されます\0。ユーティリティxargspylintで読み取られた名前を使用して実行されますがgit、使用時に-rリストが空の場合、ユーティリティは実行されません。

これは3つの問題を解決します。

  1. \0パス名を--区切りリストとして渡すことで、名前に改行やその他のスペースを含むファイルをサポートします。
  2. pylintパイプで可能な限り最大のファイルバッチを読み取って実行することで、大量のデータが生成され、「引数リストが多すぎる」ためgit ls-filesにコマンド置換の使用が失敗する状況を処理できます。
  3. pylintリストが空の場合は実行されません。

この回答では、xargs非標準(ただし一般的な)オプションsumを使用する実装-0を想定しています-r

おすすめ記事