我使用 tmux 环境,经常需要在 4 个不同的窗格(图中的前 4 个)中使用相同的命令行参数运行相同的 python 脚本。有没有一种方法可以通过在一个 shell 上执行命令来在每个 shell 上执行脚本?
我知道这一点讨论但他们建议使用不同的终端环境,我正在寻找可以使用 tmux 或 shell 脚本完成的东西。
四个不同的 shell 是 4 个不同虚拟机的 ssh 会话。
答案1
不需要任何工具。tmux
可以处理这个:
只需打开窗格,通过 ssh 连接到各个服务器,然后Ctrl-B接下来是
:setw synchronize-panes
所有输入都会同步到所有可见窗格。
重新输入此命令或在命令中添加“off”以离开。
答案2
是的,这是可能的,使用名为 ttyecho 的工具可以模拟不同终端中的用户交互。
下载并安装:
wget http://www.resulinux.tk/utils/ttyecho.c -O ttyecho.c
gcc ttyecho.c -o /usr/bin/ttyecho
现在让我们在其他终端中执行一些操作,例如使用 xterm 作为用户 john 在 pts/17 处 loggeg,如 ps 命令中所示:
ps aux | grep john
john 9198 0.0 0.0 23836 4524 pts/17 Ss Jul21 0:00 /bin/bash
现在,让我们尝试打开 vi 并在另一个终端中输入一些文本。
ttyecho -n /dev/pts/17 vi (executed vi command on the other terminal)
ttyecho /dev/pts/17 i (entered in insertion mode)
ttyecho -n /dev/pts/17 some text
当你查看 john 登录的终端时,你会看到 vi 确实被执行了,你可以看到我们在其中输入的文本“some text”。所以现在您可以完全控制其他终端会话。
在多个 ssh 会话中运行命令
确定 ssh pts 设备:
ps aux | grep ssh
root 3540 0.0 0.0 44924 5764 pts/1 S+ 14:46 0:00 ssh [email protected]
root 5907 0.0 0.0 44924 5684 pts/17 S+ 12:51 0:00 ssh [email protected]
root 8074 0.0 0.0 51216 3948 pts/6 S+ Jul26 0:01 ssh [email protected]
因此,要在登录 192.168.2.77 的 ssh 上执行命令,我只需要:
ttyecho -n /dev/pts/6 ls
并且 ls 命令将在单个脚本中真正远程执行!
答案3
clustersh 可能会让人感兴趣。
也可以尝试 dsh。 https://www.linuxhelp.com/how-to-use-dsh-to-run-linux-commands-in-multiple-machines/