2017-07-21 215 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。我只能得到第一個服務運行! –