我已经编写了一个bash脚本来在后台运行服务并从脚本退出到命令行。但是在运行eval命令后,控制不会执行下一条语句。在运行eval命令后控制下一个语句
COMMAND="nohup java -jar jenkins.war"
echo "starting service"
eval $COMMAND
echo "service running"
exit
回声“服务运行”并退出从不发生。我想在后台运行该进程,并在服务仍在运行时返回到命令提示符。我该怎么做呢?
我已经编写了一个bash脚本来在后台运行服务并从脚本退出到命令行。但是在运行eval命令后,控制不会执行下一条语句。在运行eval命令后控制下一个语句
COMMAND="nohup java -jar jenkins.war"
echo "starting service"
eval $COMMAND
echo "service running"
exit
回声“服务运行”并退出从不发生。我想在后台运行该进程,并在服务仍在运行时返回到命令提示符。我该怎么做呢?
请不要在字符串中输入其参数的命令。将您的命令及其参数置于数组(并且不使用大写变量名称,这是非常糟糕的做法),并且不使用eval
。 eval
是邪恶的!
command=(nohup java -jar jenkins.war)
echo "starting service"
"${command[@]}" 2> /dev/null &
echo "service running"
&
是让该命令在后台运行。
感谢它的工作。我有一个子问题。现在,在回显“服务运行”后,它返回到命令提示符,但它显示“nohup:将输出追加到'nohup.out',并且在我按下ctrl + c之前不会返回到命令提示符。我如何直接进入命令提示符没有按ctrl + c?我不介意保存输出到任何文件名,但过程不应该停止任何时间,直到我杀了它 – user1164061
@ user1164061你不必按Ctrl + C,只需按Enter键。编辑我的文章,这样你就不会有恼人的信息 –
对于'eval'注释+1,''$ {command [@]} +10“ – l0b0
eval不能解决这个问题,您需要'后台运行'字符,即'&'(不含引号)。
重写你行
#eval $COMMAND
$COMMAND &
根据还有什么你真的在$ COMMAND,你可能需要把eval
回来。
另外,根据您的需要,在后台运行的过程中会产生一些jobs
输出,即
[1] 10079
到控制台的STD-错误。您需要一些额外的语法将其重定向到/ dev/null。这里有一个例子:
COMMAND="sleep 10"
{ $COMMAND & ; } 1>/dev/null 2>&1
使用过程组({ .... ; }
应该不会引起任何问题,但它可能
IHTH
的符号添加到通话结束。
eval $COMMAND &
尝试:
command="java -jar jenkins.war"
echo "starting service"
$command </dev/null >jenkins.out 2>jenkins.err &
echo "service running"
谢谢大家谁回答了这个问题,并帮助我! :-) – user1164061