Shell

Makefile 子shell if 條件

  • May 9, 2022

所以我有以下程式碼:

.PHONY: test
test:
ifeq ($(grep -Fxq "substring" ./file && echo 1 || echo 0), 1)
   //do something
else
   //do other thing
endif

如果我在文件中找到一個子字元串,這個想法只是做一些事情,但是我的條件永遠不會起作用。我可以獨立執行 subshel​​l 命令,當找到子字元串時,它會按預期返回 1。現在我知道我可以簡單地在 make 文件中放置一個 bash if 表達式,但我想使用 make 文件自己的條件。

有什麼想法可能會出錯嗎?

中沒有grep功能make。但是您可以使用函式呼叫外部二進製文件shell

.PHONY: test
test:
ifeq ($(shell grep -Fxq "substring" ./file.txt && echo 1 || echo 0), 1)
   echo Yes
else
   echo No
endif

您應該記住的另一件事 -make不使用 bash(或 ksh、zsh、any-other-sh)​​來處理配方(或shell函式)。shell 解釋器是最原始的解釋器:sh. 或者更具體地說,make讀取它自己的 SHELL 變數(通常是 /bin/sh)。

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