Grep
如何反轉Makefile中的錯誤程式碼
我想測試文件是否包含模式(當從 travis 執行時,跳過了應該使我的建構失敗的 jasmine 測試)。
我有這樣的程式碼:
skipped_tests: $(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)
grep
問題是當它找到與模式匹配的行時,我沒有得到輸出。我想要這個,所以我可以在 travis 建構日誌中查看導致問題的行。有沒有辦法反轉命令錯誤程式碼(返回非 0 時返回 0,反之亦然)?我也試過這個:
skipped_tests: grep -E 'iit|ddescribe' spec/terminalSpec.js @test $$? -eq 0 # should it be -ne
但這會回顯一條有
iit
並且沒有失敗的行,如果它沒有找到該行,那麼它會在 grep 上失敗。
這個怎麼樣?
skipped_tests: @! grep -E 'iit|ddescribe' spec/terminalSpec.js
我通過兩次呼叫 grep 解決了這個問題
skipped_tests: @grep -E 'iit|ddescribe' spec/terminalSpec.js || true $(if $(shell grep -E 'iit|ddescribe' spec/terminalSpec.js), @false, @true)
有沒有更好的辦法?
我已經嘗試了一些其他的東西,但似乎 make 正在對字元串進行操作(在 Makefile 上使用 str.replace 或其他東西),因為如果 grep 的輸出是原始碼行,它會從其他可能的解決方案中給出語法錯誤。