我需要換一些代碼在這裏文檔中,並與SSH運行它使用「這裏文件」的趕上標準輸入和for
循環永遠掛在那裏。我應該怎麼做,讓ssh立即返回並繼續下一步執行?有了這個在for循環
ps axf | grep "service-${service}" | grep -v grep | awk '{print "kill -9 " $1}' | sh
:
我需要換一些代碼在這裏文檔中,並與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',並且這個循環永遠掛在那裏! –