0

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

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

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

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

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

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

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

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

4

2 回答 2

0

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

# A, B, C

(
    # D, E, F
) &

( 
    # G, H, I
) &

wait

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

于 2013-01-18T19:47:16.977 回答
0

你的命令很好。它说“无法解析参数:无法打开显示:”的原因是因为没有设置 DISPLAY,所以 gnome-terminal 不知道在哪里打开一个窗口。您是否尝试从 ssh 或从 X 之外启动的 GNU 屏幕会话运行脚本?

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

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

于 2013-01-18T19:52:22.883 回答