bash:在1个脚本文件中,在不同的终端同时执行多个命令

时间:2013-01-18 19:35:10

标签: windows bash terminal

我有一个bash脚本文件,其主要目的是(交叉)编译多个平台的二进制文件。 我想要的是在不同的终端同时执行多个命令(因此同时启动)。要清楚,必须从相同的(bash).sh文件启动(和关闭)它们。

我尝试过(就像在命令提示符下测试一样):     gnome-terminal --title“terminal 1”-x bash -c“ssh -t root@192.x.y.z'echo 1'”

但没有奏效;错误消息:“无法解析参数:无法打开显示:” 当然安装了gnome-terminal。

实际上我在(bash)sh文件中想要的是:

(在主终端中运行):命令A;命令B;命令C

同时: (在终端2中运行):命令D,命令E;命令F(然后关闭终端)

同时 (在终端3中运行):命令G,命令H;命令I(然后关闭终端)

当终端2和3完成并关闭时:执行.sh文件的其余部分

2 个答案:

答案 0 :(得分:0)

您可以使用背景子shell,然后使用wait

# A, B, C

(
    # D, E, F
) &

( 
    # G, H, I
) &

wait

请注意,这会将所有输出发送到主脚本的stdout。如果您想单独保存子广告的输出,请为每个广告单元使用(stuff) > file.log &(stuff) | tee file.log &

答案 1 :(得分:0)

你的命令没问题。它之所以说“无法解析参数:无法打开显示:”是因为未设置DISPLAY,因此gnome-terminal不知道打开窗口的位置。您是尝试从ssh运行脚本,还是从X外部开始的GNU屏幕会话?

如果您是从ssh运行的,则可以使用ssh -X打开客户端上的终端。如果您在屏幕上运行和/或想要在框的第一个显示屏上打开gnome-terminal,请在脚本的开头export DISPLAY=:0

如果要在服务器上的另一个显示器上打开它(例如NX或VNC会话),请在那里手动打开终端echo $DISPLAY以查看它是哪个显示号码,然后将DISPLAY设置为该值在你的脚本中。