簡體   English   中英

在bash文件中轉義變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM