bash論理OR演算子がGNU makefileで機能しないのはなぜですか?

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、実行されていません。

しかし:

モジュール「連絡先」はいインストールする。
cmdlineで次のコマンドを実行したときにも表示されます。

$ lsmod|grep liason
liason                 16384  0

lsmod|grepしたがって、makefile出力で同じ空の引用符は意味がありません。

答え1

$Makeによって処理されている間は空の$(lsmod|grep liason)文字列が生成され、コマンドは実際には実行されません。式をシェルに渡すには、次の値を2倍にする必要があります$

bash -c '[ "$$(lsmod|grep liason)" == "" ] || rmmod liason'

次のように単純化できます。

if lsmod | grep -q liason; then rmmod liason; fi

これにより、モジュールの削除中にエラーが発生した場合にビルドが停止します。

関連情報