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

12

我想在Makefile中执行一个Shell命令,但我不知道如何正确地使用子bash命令。

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

谢谢你的帮助!

2个回答

18
你需要引用$符号并添加;
import-bd:
    @while ! nc -z $$(make ips | awk '/mysql/ { print $$2 }') 3306; do \
        sleep 1; \
    done

在make看到一个单独的$时,它会尝试进行变量展开。通过写入$$,make将单个$传递给awk(更准确地说,它将单个$传递给SHELL,然后调用awk)。此外,在sleep 1之后需要分号,因为make会去掉换行符。


完美!谢谢 :) - Nicolas S.

3

sleep 1 后面缺少分号。
同时要先解析这行代码再运行。你需要用两个美元符号来转义一个美元符号。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接