Shell通过带符号的字符串执行多个命令(后台进程)

Shell通过带符号的字符串执行多个命令(后台进程),shell,Shell,看来sh不治疗;作为命令的分隔符 $ sh -c 'nohup ./server &; echo foo' sh: -c: line 0: syntax error near unexpected token `;' 那么,如何使用ampersandbackground进程从字符串执行多个命令?您所追求的是所谓的: 如果控制操作员终止命令 以下示例显示了此行为: sh -c "{ sleep 10 && echo foo ;} & echo bar&q

看来sh不治疗;作为命令的分隔符

$ sh -c 'nohup ./server &; echo foo'
sh: -c: line 0: syntax error near unexpected token `;'

那么,如何使用ampersandbackground进程从字符串执行多个命令?

您所追求的是所谓的:

如果控制操作员终止命令

以下示例显示了此行为:

sh -c "{ sleep 10 && echo foo ;} & echo bar"
这将执行echo bar,10秒后,由于sleep 10&&echo foo命令,将执行echo foo。后者是作为复合命令编写的

因此,解决方案是移除半柱;这实际上是一个错误。原始命令失败的原因是您试图执行一个空命令。这项工作:

sh -c "echo foo & echo bar ; echo car"
但这失败了:

sh -c "echo foo &          ; echo car"
因为在语法上缺少一个命令

因此,最终的解决方案很简单:

sh -c 'nohup ./server & echo foo'
sh -c 'nohup ./server & echo foo'