如何通过bash -i -c启动后台进程?语法错误问题求助
解决bash -i -c启动后台进程的语法错误问题
嘿,这个问题我之前也碰到过!你出错的原因很简单:&本身就是bash里的命令分隔符,你在它后面再加个;就属于画蛇添足了,bash自然会报语法错误。
直接修正后的正确命令
把多余的;删掉就行,完美运行的写法是:
bash -i -c "./daemon.sh & ./another_daemon.sh &"
补充说明下原理
当你用bash -c执行多条命令时,只要用&把每个后台命令分开,bash就会依次将它们放到后台运行。&的作用就是告诉bash:“这个命令放后台跑,我继续执行下一个”,所以完全不需要额外的;来分隔。
进阶小技巧:让后台进程更稳定
如果希望这些后台进程在bash会话关闭后还能继续运行(避免挂掉),可以搭配nohup和输出重定向,比如:
bash -i -c "nohup ./daemon.sh > /dev/null 2>&1 & nohup ./another_daemon.sh > /dev/null 2>&1 &"
这里的> /dev/null 2>&1是把标准输出和错误输出都丢到空设备,防止生成一堆nohup.out文件占空间。
要是你觉得命令太长可读性差,也可以用大括号把命令组起来(复杂场景下更清晰):
bash -i -c "{ ./daemon.sh & ./another_daemon.sh & }"
内容的提问来源于stack exchange,提问作者Yury Bondarau
相关产品推荐
相关产品推荐

