我有一个可以正常运行的部署脚本。最后,我添加了这个块:
cat << EOF > /etc/init.d/uwsgi
#!/bin/bash
daemon=$APPVENV/bin/uwsgi
args="--emperor $APPCONF/uwsgi/app.ini --daemonize /var/log/emperor.log --emperor-pidfile $APPDIR/emperor.pid --gid `id -g $APPUSER`"
pid=$APPDIR/emperor.pid
case "$1" in
start)
echo "Starting uwsgi"
start-stop-daemon -p $pid --start --exec $daemon -- $args
;;
stop)
echo "Stopping script uwsgi"
start-stop-daemon --signal INT -p $pid --stop $daemon -- $args
;;
reload)
echo "Reloading conf"
kill -HUP $(cat $pid)
;;
*)
echo "Usage: /etc/init.d/uwsgi {start|stop|reload}"
exit 1
;;
esac
exit 0
EOF
现在,当我运行我的部署脚本时,它会卡在这里,我只看到一个闪烁的光标,它不会在它之后运行任何行。
我的格式化是否有任何问题,因为我知道用cat创建一个文件是非常挑剔的,如何格式化,制表等等。
答案 0 :(得分:1)
变量仍在heredocs中替换,也可以使用$()进行替换,您可以在脚本中执行此操作:
kill -HUP $(cat $pid)
您的安装程序尝试捕获该文件,$ pid可能为空,因此它等待标准输入的输入。 你想逃避那些&#34; $&#34;防止扩张,比如
\$(cat \$foo)
当然,对于所有这些变量,您也不希望在安装过程中进行扩展。