[英]Makefile multiline dash command run executable in a detached process
我的makefile中有以下目标:(我想在一个分离的进程中运行python http服务器,当bash脚本完成时杀死服务器)
TEST_PORT = 17777
test::
$(ENV_VARS) \
python -m SimpleHTTPServer $(TEST_PORT); \
PID=$$(lsof -t -i @localhost:$(TEST_PORT) -sTCP:listen); \
echo $(PID); \
if [ -n "$$PID" ]; \
then \
python test.py; \
fi; \
function finish { \
if [ -n "$$PID" ]; \
then \
kill -9 $$PID; \
fi \
} \
trap finish EXIT;
但是,当我把一个&
后行python ...
我得到一个错误
/ bin / dash:语法错误:“;” 意外
怎么能以适当的方式完成?
我已经改变了我的makefile来执行以下操作:
test::
python -m SimpleHTTPServer $(TEST_PORT) &
PID=$$(lsof -t -i @localhost:$(TEST_PORT) -sTCP:listen); \
if [ -n "$$PID" ]; \
then \
$(ENV_VARS) python test.py; \
fi \
function finish { \
if [ -n "$$PID" ]; \
then \
kill -9 $$PID; \
fi \
} \
echo $$PID; \
trap finish EXIT;
但是我收到一个错误:(没有行号)
/ bin / dash:语法错误:单词意外
这里要记住的重要一点是,当shell看到命令时,你的换行符实际上并不存在。
所以你的第一个命令变为:
$(ENV_VARS) python -m SimpleHTTPServer $(TEST_PORT); PID=$$(lsof -t -i @localhost:$(TEST_PORT) -sTCP:listen); echo $(PID); if [ -n "$$PID" ]; then python test.py; fi; function finish { if [ -n "$$PID" ]; then kill -9 $$PID; fi } trap finish EXIT;
你的第二个命令变为:
PID=$$(lsof -t -i @localhost:$(TEST_PORT) -sTCP:listen); if [ -n "$$PID" ]; then $(ENV_VARS) python test.py; fi function finish { if [ -n "$$PID" ]; then kill -9 $$PID; fi } echo $$PID; trap finish EXIT;
现在这些都很难读,所以我不指望你发现问题,但问题是你在一些地方缺少语句终止符。
特别:
大括号( {}
)是单词元素,因此需要它们周围的空格(以及结束大括号之前和之后的终止符)。 你在这里错过了那些终结者。 fi } trap
和这里fi } echo
。
fi
也不是语句终止符,因此它需要在它和下一个语句之间。 你在这里缺少一个test.py; fi function
test.py; fi function
(以及第一点中括号中的test.py; fi function
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.