2017-07-21 157 views
0

我需要换一些代码在这里文档中,并与SSH运行它使用“这里文件”的赶上标准输入和for循环永远挂在那里。我应该怎么做,让ssh立即返回并继续下一步执行?有了这个在for循环

ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " $1}' | sh 

+1

您正在引用heredoc分隔符以防止'awk'的'$ 1'扩展,但是这也阻止了'$ service'的扩展。 – chepner

+0

这里的'$ service'由'ssh'的env变量导出,并且heredoc定界符之间的命令在第一个循环中正常工作,相应的服务可以被终止并启动。这里唯一的问题是'ssh'会吃掉'stdin',并且这个循环永远挂在那里! –

回答

3

首先,你可以更换该

pkill -f "service-${service}" 

您可以跳过 “这里的文档”,简化:

for service in ${services[@]} 
do 
{ 
    echo "pkill -f service-${service}"; 
    echo "nohup java -jar service-${service}.jar >> nohup.out 2>&1 &"; 
} | ssh -tt [email protected]${server} 
done 

或者如果你喜欢heredoc:

for service in ${services[@]} 
do 
ssh -tt [email protected]${server} <<EOF 
    pkill -f service-${service} 
    nohup java -jar service-${service}.jar >> nohup.out 2>&1 & 
EOF 
done 
+0

当我使用heredoc版本时,heredoc中的命令永远不会运行! –

+0

如果您使用非heredoc版本,该怎么办? –

+0

对不起,延迟回复。今天我尝试了非heredoc版本,然后for循环只能运行第一个循环,而ssh吃掉stdin。我只能得到第一个服务运行! –