Bash

為什麼 bash 邏輯 OR 運算符不能在 GNU makefile 中工作?

  • October 7, 2021

我有以下 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

這確保了刪除模組時的任何錯誤都會停止建構。

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