Bash

當命令替換結果為空時不執行命令

  • April 14, 2022

我有以下程式碼可以pylint在帶有文件副檔名的 Git 儲存庫中的所有文件上執行.py,由命令替換提供。

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

該腳本執行得很好,除非沒有與該模式匹配的文件。但是,該pylint實用程序在沒有文件的情況下被呼叫時會給出詳細的幫助消息,這不是我想要的——我根本不想呼叫pylint

那麼,在呼叫之前,我能否就如何最好地測試是否有任何文件與文件名模式匹配尋求一些幫助pylint

我是一個pylint新手bash

根本不要使用命令替換。相反,使用管道將數據從git ls-filesto傳遞給並在生成的文件列表上執行:xargs``xargs``pylint

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

這會將文件列表從git命令傳遞到 -xargs分隔\0列表。該xargs實用程序將pylint使用從 讀取的名稱執行git,但-r如果列表為空,它將不會執行該實用程序。

這解決了三個問題:

  1. 通過將路徑名作為\0-delimited 列表傳遞,它支持名稱包含換行符和其他空格的文件。
  2. 通過從管道中讀取並pylint在盡可能多的文件上執行,我們能夠處理git ls-files產生大量數據以致使用命令替換會因“參數列表太長”而失敗的情況。
  3. pylint如果列表為空,它不會執行。

此答案假定使用xargs具有非標準(但常見)選項-0-r.

引用自:https://unix.stackexchange.com/questions/699103