如果」用git命令重新開心,你可以管到grep -q
,wh OSE返回代碼會告訴你,如果有任何輸出:
git ls-files --other --exclude-standard --directory "$folder/" | grep -q .
只要grep的接收任何輸入,模式.
匹配,它成功地退出。
要抑制錯誤輸出,可以將整個事件包裝在花括號{ }
中,並將2>/dev/null
添加到最後。
另一種選擇是解析git status
的輸出。例如,要查看是否在輸出中的任何文件都開始$directory
的路徑,你可以這樣做:
git status --porcelain | awk -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'
如果你的版本的awk支持設置的記錄分隔符爲空字節,你可以使用git status -z
代替:
git status -z | awk -v RS='\0' -v dir="$dir" 'index($2, dir) == 1 { found = 1; exit } END { exit !found }'
要篩選出未跟蹤文件,你可以添加對`$ 1 =檢查 「??」:
git status -z | awk -v RS='\0' -v dir="$dir" '$1 != "??" && index($2, dir) == 1 { found = 1; exit } END { exit !found }'
是的,對於'sed 1 q'同樣如此,但即使管道程序退出腳本也不會繼續,直到原始命令結束。你可以這樣測試:'(echo -e「test \ ntest」&& sleep 5s)| grep -q .' –
我不確定你的測試是否一樣 - 也許更好的例子是'find。 | grep -q .'在一個包含大量文件的目錄中。該程序幾乎立即退出,然而如果沒有grep管道,花費很長時間。 –
你說得對 - 我應該認爲這與緩衝有關。這就是說:如果需要很長時間才能找到有問題的文件,它仍然會掛起,直到它通過整個目錄結構,所以這仍然不理想。理想將是一個專門的管道命令或東西 –