Bash
為什麼 bash 邏輯 OR 運算符不能在 GNU makefile 中工作?
我有以下 GNU make Makefile
PWD := $(shell pwd) obj-m += liason.o default: bash -c '[ "$(lsmod|grep liason)" == "" ] || rmmod liason' make -C /src M=$(PWD) modules
我呼叫makefile;它在輸出中顯示了這一點:
bash -c '[ "" == "" ] || rmmod liason'
因此,
rmmod
不被執行。然而:
模組“liason”已安裝。
當我從 cmdline 執行以下命令時,它甚至會出現。
$ lsmod|grep liason liason 16384 0
因此,makefile 輸出中相同的空引號
lsmod|grep
沒有意義。
$
正在由 Make 處理;$(lsmod|grep liason)
產生一個空字元串,這些命令實際上並沒有被執行。要將表達式傳遞給 shell,您需要將$
:bash -c '[ "$$(lsmod|grep liason)" == "" ] || rmmod liason'
您可以將其簡化如下:
if lsmod | grep -q liason; then rmmod liason; fi
這確保了刪除模組時的任何錯誤都會停止建構。