如何启动多个xterm窗口并在每个窗口上运行命令,之后将每个窗口打开?

时间:2014-12-15 17:14:37

标签: linux bash unix ssh xterm

我很懒,我更喜欢计算机为我做的工作。我每天都会进入几台机器,所以我创建了一个简单的脚本,启动了一些xterm窗口并将它们放在我想要的位置(正如你所看到的,我正在使用bash):

#!/bin/bash
xterm -geometry 80x27+1930+0 &
xterm -geometry 80x27+2753+0 &
xterm -geometry 80x27+1930+626 &
xterm -geometry 80x27+2753+626 &

但是,我接下来要做的就是转到第一个窗口并输入

ssh server_a

然后在第二个

ssh server_b

等等。我想做的是让我的脚本在每个xterm窗口中执行ssh命令,然后打开窗口让我完成我的工作。我已经看过xterm的-e选项,但是在执行命令后窗口关闭了。有没有办法做到这一点?

如果这是一个重复的问题,我道歉。我已经四处寻找并且没有任何运气。非常感谢!

4 个答案:

答案 0 :(得分:4)

我希望看到一个更优雅的答案,但我想出的确实有效:

xterm -e bash -c 'echo foo; exec bash'

用你选择的命令替换echo foo,你很高兴。

答案 1 :(得分:2)

This answer给出了迄今为止我见过的最佳答案之一。在shebang或执行终端时使用bash --init-file标志:

#!/bin/bash --init-file
commands to run

...并执行它:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang

exec选项唯一真正的抱怨是,如果在exec bash之前执行的命令长时间运行并且用户中断它(^C),则它不会运行shell 。使用--init-file选项,shell继续运行。

另一个选项是来自OpenWin项目的cmdtool

/usr/openwin/bin/cmdtool -I 'commands; here'
# or
/usr/openwin/bin/cmdtool -I 'commands; here' /bin/bash

...其中cmdtool将使用-I传递的命令注入到从属进程,就好像它是由用户键入的一样。这样可以将执行的命令保留在shell历史记录中。

答案 2 :(得分:0)

另一种选择是使用gnome终结器。这会以交互方式创建和定位终端,您可以设置每个终端在终结器首选项中运行命令。

还有很多额外的技巧,使用键绑定来移动,旋转,最大化/最小化包含终结器窗口内的终端

请参阅:https://superuser.com/a/610048

答案 3 :(得分:0)

“ ClusterSSH通过一个图形控制台窗口控制多个xterm窗口,以允许命令通过ssh连接在多台服务器上交互运行”

https://github.com/duncs/clusterssh/wiki

$ cssh server_a server_b
$ command