0

在一个 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

4

1 回答 1

0

当只打开一个通过 ssh-ed 连接到远程机器的终端时,由于“cut”命令,它会在无限循环中运行。如果有一个单独的案例来处理一个终端,这将正常工作。

于 2013-10-24T09:14:54.870 回答