Bash
當命令替換結果為空時不執行命令
我有以下程式碼可以
pylint
在帶有文件副檔名的 Git 儲存庫中的所有文件上執行.py
,由命令替換提供。pylint $(git ls-files '*.py')
該腳本執行得很好,除非沒有與該模式匹配的文件。但是,該
pylint
實用程序在沒有文件的情況下被呼叫時會給出詳細的幫助消息,這不是我想要的——我根本不想呼叫pylint
。那麼,在呼叫之前,我能否就如何最好地測試是否有任何文件與文件名模式匹配尋求一些幫助
pylint
?我是一個
pylint
新手bash
。
根本不要使用命令替換。相反,使用管道將數據從
git ls-files
to傳遞給並在生成的文件列表上執行:xargs``xargs``pylint
git ls-files -z '*.py' | xargs -0 -r pylint
這會將文件列表從
git
命令傳遞到 -xargs
分隔\0
列表。該xargs
實用程序將pylint
使用從 讀取的名稱執行git
,但-r
如果列表為空,它將不會執行該實用程序。這解決了三個問題:
- 通過將路徑名作為
\0
-delimited 列表傳遞,它支持名稱包含換行符和其他空格的文件。- 通過從管道中讀取並
pylint
在盡可能多的文件上執行,我們能夠處理git ls-files
產生大量數據以致使用命令替換會因“參數列表太長”而失敗的情況。pylint
如果列表為空,它不會執行。此答案假定使用
xargs
具有非標準(但常見)選項-0
和-r
.