【问题标题】:Creating init script from shell script从 shell 脚本创建初始化脚本
【发布时间】:2018-01-29 16:08:51
【问题描述】:

我正在尝试从 shell 脚本创建一个初始化脚本。但问题是生成的 init 脚本不携带与 shell 脚本中的“$”符号相关的变量。

例如。 shell 脚本中的以下函数被翻译为

setup_sysd () {
cat << EOF > /etc/init.d/example
#!/bin/sh
. /etc/rc.d/init.d/functions

start() {
   echo -n "Starting ${DESC}: "
   cd ${WORK_DIRECTORY}
   $EXAMPLE
   RETVAL=$?
   [ $RETVAL -eq 0 ] && touch -- "$LOCK"
   return $RETVAL
}

exit $RETVAL
EOF

被复制为,

start() {
echo -n "Starting : "
cd 

RETVAL=0
[  -eq 0 ] && touch -- ""
return 
}

【问题讨论】:

    标签: linux bash shell init


    【解决方案1】:

    在 here-doc 分隔符 'EOF' 周围使用单引号以避免进程扩展

    cat << 'EOF' > /etc/init.d/example
    ...
    EOF
    

    但是在生成的 sh 脚本中仍然存在引用问题:

    cd ${WORK_DIRECTORY}
    

    应该是

    cd "${WORK_DIRECTORY}"
    

    还有怎么定义变量DESC,LOCK,finally变量应该是小写的。

    【讨论】: