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

问题描述 投票:4回答:4

我很懒,我更喜欢计算机为我做的工作。我每天都会进入几台机器,所以我创建了一个简单的脚本,启动了一些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选项,但是在执行命令后窗口关闭了。有没有办法做到这一点?

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

linux bash unix ssh xterm
4个回答
4
投票

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

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

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


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历史中的效果。


0
投票

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

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

见:https://superuser.com/a/610048


0
投票

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

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

$ cssh server_a server_b
$ command
© www.soinside.com 2019 - 2024. All rights reserved.