[英]Escaping variables in bash file
我正在bash文件中創建一個init.d腳本,其過程如下:
# AUTOSTART
$APPDIR=somedir
$APPCONF=somedir
$APPVENV=somedir
$APPUSER=someuser
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 -m -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
根據我的理解,由於需要在文件外部定義$ APPCONF,$ APPVENV,$ APPUSER和$ APPDIR,因此需要對其進行轉義。 如此簡單地在變量前面加上反斜杠是正確的嗎?
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
雖然它似乎仍然不起作用,服務也沒有啟動,所以我想我可能做錯了其他事情。 任何人都可以確認我正在正確地逃跑嗎?
美元符號僅用於讀取/使用變量的值,而不用於設置變量的值。 因此,將APPDIR
設置為somedir
如下所示:
APPDIR=somedir
根據調用腳本的方式,您可能還需要導出變量:
export APPDIR=somedir
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.