在一个 localhost 中有多个终端,我在其中 ssh-ed 到相同的用户和相同的 IP 地址。我想找到已记录远程主机的所有终端,终止在这些终端中运行的所有进程并注销该远程主机。我成功使用了以下 shell 脚本。
#Find list of terminals in which the remote host is logged in.
openedTerminals=`ssh $user@$publicIP "ps -aux | grep -i $user@pts | grep -v grep | cut -d' ' -f 3"`
#close all the ssh sessions to that remote host
i=1
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
while [[ -n "$terminalPID" ]]
do
ssh $user@$publicIP "kill $terminalPID"
i=`expr $i + 1`
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
done
我使用以下命令打开一个新终端并通过 ssh 连接到远程主机,从命令提示符执行时该主机运行良好:
gnome-terminal -window-with-profile=NOCLOSEPROFILE -e "ssh -X $user@$publicIP"
除了完成第一个代码的工作之外,我还想为每一个被第一个代码终止的远程机器打开一个新终端(通过 ssh-ing 到另一台远程机器)。所以我尝试在第一个代码中插入上述命令:
#Find list of terminals in which the remote host is logged in.
openedTerminals=`ssh $user@$publicIP "ps -aux | grep -i $user@pts | grep -v grep | cut -d' ' -f 3"`
#close all the ssh sessions to that remote host
i=1
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
while [[ -n "$terminalPID" ]]
do
ssh $user@$publicIP "kill $terminalPID"
gnome-terminal -window-with-profile=NOCLOSEPROFILE -e "ssh -X $newUser@$newPublicIP"
i=`expr $i + 1`
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
done
但这开始在无限循环中运行并打开无限数量的新终端。
请告诉我我错在哪里,并提出一种纠正方法以获得所需的解决方案。
另外,我希望在同一个 shell 脚本(第一个代码)中添加一个命令来关闭远程机器注销的终端。有人可以指导我吗?
在此先感谢, Saeya