Grep

如何反轉Makefile中的錯誤程式碼

  • May 29, 2018

我想測試文件是否包含模式(當從 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 的輸出是原始碼行,它會從其他可能的解決方案中給出語法錯誤。

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