在for循环
我需要换一些代码在这里文档中,并与SSH运行它使用“这里文件”的赶上标准输入和for
循环永远挂在那里。我应该怎么做,让ssh立即返回并继续下一步执行?有了这个在for循环
ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " $1}' | sh
:
首先,你可以更换该
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
当我使用heredoc版本时,heredoc中的命令永远不会运行! –
如果您使用非heredoc版本,该怎么办? –
对不起,延迟回复。今天我尝试了非heredoc版本,然后for循环只能运行第一个循环,而ssh吃掉stdin。我只能得到第一个服务运行! –
您正在引用heredoc分隔符以防止'awk'的'$ 1'扩展,但是这也阻止了'$ service'的扩展。 – chepner
这里的'$ service'由'ssh'的env变量导出,并且heredoc定界符之间的命令在第一个循环中正常工作,相应的服务可以被终止并启动。这里唯一的问题是'ssh'会吃掉'stdin',并且这个循环永远挂在那里! –