一尘不染

start-stop-daemon引用的参数被误解

linux

我一直在尝试使用start-stop-
daemon制作一个初始化脚本。我陷入了守护进程的争论。我想将它们保留在脚本顶部的变量中,但是我无法获得引用来正确过滤掉。

我将在这里使用ls,这样我们就不必研究大多数人不知道或不在意的二进制文件和参数了。

我正在寻找的最终结果是开始-停止…运行 ls -la“ / folder with space /”

DAEMON=/usr/bin/ls 
DAEMON_OPTS='-la "/folder with space/"'

start-stop-daemon --start --make-pidfile --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS

两次转义选项并尝试使用无数种不同的引号都无济于事……然后它们最终出现在守护程序中,它们总是被弄乱了。将 $ DAEMON_OPTS
括在引号中会更改内容…然后将它们视为自引号以来的内容…绝对不是正确的数字:)

回显命令行(开始-停止…)可在屏幕上正确打印内容。但是守护程序(真正的守护程序,不是ls)抱怨参数数量错误。

如何指定变量,以便将其中的引号正确地带到守护程序中?


阅读 500

收藏
2020-06-07

共1个答案

一尘不染

我以为我会发布在我的工作初始化脚本中使用的最终报价:

COMMAND="/path/to/script -opt param param2 param3"
DAEMON_OPTS=" 0.0.0.0:$PORT -dest $OUTPUT_DIRECTORY -command"

start-stop-daemon --start --background --make-pidfile --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS "\"$COMMAND\""

显然这是一个不完整且不起作用的示例,但我希望您能理解其中的要点。内线对的双引号是有效的。

2020-06-07