繁体   English   中英

在for循环中使用“ here document”

[英]Use of “here document” in for loop

我需要在here文档中包装一些代码,然后使用ssh运行它:

for service in ${services[@]}
do
ssh -tt root@${server} service=${service} 'bash -s' << 'ENDSSH'
    ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " $1}' | sh
    nohup java -jar service-${service}.jar >> nohup.out 2>&1 &
ENDSSH
done

但是for循环只能执行第一次运行,而ssh似乎捕获了stdin,并且for循环永远挂在那里。 我应该如何做才能让ssh立即返回并继续执行下一个?

首先,您可以替换为:

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 root@${server}
done

或者,如果您更喜欢heredoc:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM