Bash makefile循环和函数调用令人头痛

Bash makefile循环和函数调用令人头痛,bash,function,for-loop,makefile,Bash,Function,For Loop,Makefile,我在Makefile中有以下代码: NODES = celery1 celery2 celery3 priority export get-status = /bin/bash -c "ps -p `/bin/bash -c '[ -a log/$(1).pid ] && cat log/$(1).pid || echo 1'` -o command= | grep $(1) > /dev/null && echo \"[$(1)] Appears to b

我在Makefile中有以下代码:

NODES = celery1 celery2 celery3 priority export
get-status = /bin/bash -c "ps -p `/bin/bash -c '[ -a log/$(1).pid ] && cat log/$(1).pid || echo 1'` -o command= | grep $(1) > /dev/null && echo \"[$(1)] Appears to be running\" || eval 'echo \"[$(1)] Not running\" && exit 1'"

celery-status:
    for n in ${NODES}; do $(call get-status,$$n); done
我无法使它工作。当我这样做的时候:

get-status = /bin/bash -c "ps -p `/bin/bash -c '[ -a log/$(1).pid ] && cat log/$(1).pid || echo $(1)'` -o command= | grep $(1) > /dev/null && echo \"[$(1)] Appears to be running\" || eval 'echo \"[$(1)] Not running\" && exit 1'" 1 displaying the argument instead of 1

celery-status:
    for n in ${NODES}; do echo $(call get-status,$$n); done # echo the statements
以下是输出:

/bin/bash -c ps -p  -o command= | grep celery1 > /dev/null && echo "[celery1] Appears to be running" || eval 'echo "[celery1] Not running" && exit 1'
/bin/bash -c ps -p  -o command= | grep celery2 > /dev/null && echo "[celery2] Appears to be running" || eval 'echo "[celery2] Not running" && exit 1'
/bin/bash -c ps -p  -o command= | grep celery3 > /dev/null && echo "[celery3] Appears to be running" || eval 'echo "[celery3] Not running" && exit 1'
/bin/bash -c ps -p  -o command= | grep priority > /dev/null && echo "[priority] Appears to be running" || eval 'echo "[priority] Not running" && exit 1'
/bin/bash -c ps -p  -o command= | grep export > /dev/null && echo "[export] Appears to be running" || eval 'echo "[export] Not running" && exit 1'
看起来
$(1)
不起作用,可能我没有正确地转义


我在这里有点绝望:/

如果你避开单引号会发生什么:
/bin/bash-c“ps-p`/bin/bash-c\\[-a log/$(1).pid]&&cat log/$(1).pid | echo$(1)\''''-o命令=| grep$(1)>/dev/null&&echo\\[$(1)]似乎正在运行\“| eval'echo\”[$(1)]未运行\&&exit 1\”1显示参数而不是1`
事实上我找到了解决方案:
get status=/bin/bash-c“ps-p
/bin/bash-c'[-a$$0]&cat$$0 | | echo 1'$(1)`-o命令=| grep$(2)>/dev/null&&echo\[$(2)]似乎正在运行\“| eval'echo\[$(2)]未运行\&&exit 1''似乎在执行/bin/bash时出现了问题:第二个调用现在从第一个调用获取参数。把它作为一个答案,并给自己的信用