繁体   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