在一个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到另一个远程机器)。所以我尝试在第一个代码中插入上面的命令:
#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
答案 0 :(得分:0)
当只打开一个ssh-ed到远程机器的终端时,由于“cut”命令,它会在无限循环中运行。如果有一个单独的案件来处理一个终端,这将正常工作。