【问题标题】:bash: in 1 script file execute multiple commands simultaneously in different terminalsbash:在1个脚本文件中同时在不同终端执行多个命令
【发布时间】:2013-01-18 19:35:10
【问题描述】:

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

我试过了(就像在命令提示符下测试一样): gnome-terminal --title "终端 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 文件的其余部分

【问题讨论】:

  • 你需要实际的窗口或进程就足够了吗?

标签: windows bash terminal


【解决方案1】:

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

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

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

【讨论】:

  • Tnx。我正在/从 ssh 终端会话中运行脚本。
  • 对不起,我不知道如何实现/使用 -X,因为 gnome-terminal --title "terminal 1" -x bash -c "ssh -t root@192.x.y.z 'echo 1 '-X" 也不起作用
  • SSH -X 有效,但它会在同一窗口中打开另一个 SSH 会话。我使用putty通过SSH登录,然后运行shell脚本
  • 您是否在 Windows 上使用 Putty 登录,并且想要在 Putty 窗口旁边打开 gnome 终端?如果是这样,您必须为 Windows 运行 X 服务器,并让 Putty 转发给它。这是guide using xming
  • 等等...我在 Windows 上使用 putty 登录到我的本地服务器,所以一切都是本地的(LAN)。为什么需要X server,我还以为是远程连接的呢
【解决方案2】:

您可以使用后台子shell,然后使用wait

# A, B, C

(
    # D, E, F
) &

( 
    # G, H, I
) &

wait

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

【讨论】:

  • 我想从一个 shell 脚本文件(ssh 模式)中执行它,然后在更多终端中同时打开和执行,然后关闭那些“额外”终端并返回主终端。所以没有文件保存等。
  • 我只提出了重定向,以防您希望单独保存这些命令的输出。如果后台子shell 不足并且您出于某种原因确实需要不同的窗口,请参考@thatotherguy 的回答。
猜你喜欢
  • 2014-12-10
  • 2014-05-04
  • 2021-04-06
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多