在 for 循环中使用 "here document"
Use of "here document" in for loop
我需要在此处文档中包装一些代码,然后 运行 使用 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 " }' | sh
nohup java -jar service-${service}.jar >> nohup.out 2>&1 &
ENDSSH
done
然而 for 循环只能执行第一个 运行 并且 ssh 似乎捕获标准输入并且 for
循环永远挂在那里。我应该怎么做才能让sshreturn立即执行并继续下一个执行?
首先,您可以替换为:
ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " }' | sh
有了这个:
pkill -f "service-${service}"
您可以跳过 "here document" 并简化:
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
我需要在此处文档中包装一些代码,然后 运行 使用 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 " }' | sh
nohup java -jar service-${service}.jar >> nohup.out 2>&1 &
ENDSSH
done
然而 for 循环只能执行第一个 运行 并且 ssh 似乎捕获标准输入并且 for
循环永远挂在那里。我应该怎么做才能让sshreturn立即执行并继续下一个执行?
首先,您可以替换为:
ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " }' | sh
有了这个:
pkill -f "service-${service}"
您可以跳过 "here document" 并简化:
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