如何在Makefile中运行子Shell脚本?

时间:2018-05-17 11:53:36

标签: bash makefile

我想执行Shell命令,但我不知道如何在我的Makefile中正确执行sub bash命令

import-bd:
    @while ! nc -z $(make ips | awk '/mysql/ { print $2 }') 3306; do \
        sleep 1 \
    done
    ...

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您需要引用$并添加;

import-bd:
    @while ! nc -z $$(make ips | awk '/mysql/ { print $$2 }') 3306; do \
        sleep 1; \
    done

当make看到一个$时,它会尝试进行变量扩展。通过编写$$,将单个$传递给awk(或者更确切地说,它将单个$传递给SHELL,后者调用awk)。此外,需要sleep 1之后的分号,因为make剥离了换行符。

答案 1 :(得分:2)

sleep 1后你丢失了分号 还要首先解析此行然后再进行bash。你需要用两美元来逃避美元。

import-bd:
    @while ! nc -z $$(make ips | awk '/mysql/ { print $$2 }') 3306; do \
        sleep 1; \
    done