2016-09-03 58 views
1

我想輸出一個命令成功的文件的名稱,當我期望它會失敗時,同時抑制警告。我更喜歡單線。單線程測試使用bash的失敗命令

東西線沿線的:

find xml/malformed-xml -type f -iname '*.xml' -exec if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo "Should have failed for {}"; fi \; 

find xml/malformed-xml -type f -iname '*.xml' -print0 | xargs -0 -n 1 -i if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null ; then echo "Should have failed for {}"; fi 

,到目前爲止,我沒有得到太多的愛。建議?

+0

bash有放逐親愛的習慣;)提供你不要玩它公平 –

回答

1

試試這個:

find xml/malformed-xml -type f -iname '*.xml' -exec xmllint --noout --dtdvalid check-xml.dtd {} \; -print 2>/dev/null 

說明:find,參數是隱式由-and分離。所以-exec ... {} \; -print真的是-exec ... {} \; -print。現在由於-and的短路邏輯,第二部分只有在第一部分成功時纔會執行。

你的兩個代理失敗的原因是if ... then ... else ...不是程序,它是bash內建的,所以你不能從find -execxargs中調用它。這兩個程序都只能執行實際的程序。

0

嘗試.. 。「

find xml/malformed-xml -type f -iname '*.xml' -exec sh -c "if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo Should have failed for {}; fi" \;