这有效:
${START} &
Run Code Online (Sandbox Code Playgroud)
这不起作用:
APPLICATION_OUTPUT=`echo &`
${START} ${APPLICATION_OUTPUT}
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
APPLICATION_OUTPUT="&"
${START} ${APPLICATION_OUTPUT}
Run Code Online (Sandbox Code Playgroud)
还没有:
APPLICATION_OUTPUT=&
${START} ${APPLICATION_OUTPUT}
Run Code Online (Sandbox Code Playgroud)
如何在带有arg的命令中附加"&"?
你可以让START="FOO"或更好的东西.
你有两个选择,大致是"安全"和"不安全"(第三个是"功能").
if [ "$run_in_background" = "yes" ]
then ${START} &
else ${START}
fi
Run Code Online (Sandbox Code Playgroud)
这只是选择使用哪种模式.我假设没有双引号${START}可以 - 你可能会更好地使用数组保持命令及其参数然后使用双引号:"${START_ARRAY[@]}"可选地使用&后引号.
if [ "$run_in_background" = "yes" ]
then tail="&"
else tail=""
fi
eval ${START} $tail
Run Code Online (Sandbox Code Playgroud)
这是一个令人担忧的行动.如果用户控制了内容$START,则确保他们没有提交会造成损害的代码.它还重新读取是通过连接产生的字符串${START}和$tail然后重新扫描它.如果有空格或引号或其他特殊字符需要处理,你必须努力工作以保证${START}安全eval.总的来说,这不是要走的路.
start()
{
${START}
}
if [ "$run_in_background" = "yes" ]
then start &
else start
fi
Run Code Online (Sandbox Code Playgroud)
在"安全""功能"的好处是,你不必重复漫长和可能的扭曲的命令行 - 你只需要编写一次函数来执行任何需要,然后调用函数运行在背景中与否.
无论是"安全"还是"功能".两者都有效; 两者都是合理的.