Shell脚本:打开多个终端并运行命令?

时间:2016-04-17 18:58:26

标签: linux bash shell

我正在尝试创建一个非常简单的shell脚本,它打开并运行我的程序的五个实例。对于批处理,我会做这样的事情:

@echo off
python webstore.py 55530
python webstore.py 55531
python webstore.py 55532
exit

这将打开三个终端并使用不同的命令行参数在每个终端上运行命令。如何使用在每个基于unix的平台上运行的shell脚本创建相同的内容?我已经看到了一些打开终端的命令,但它们是特定于平台的(gnome-termial,xterm等)。

1 个答案:

答案 0 :(得分:1)

  

如何使用在每个基于unix的平台上运行的shell脚本创建相同的内容?

你所要求的是有点不合理。想一想:在Windows上,你总是在Desktop Window Manager期内,而你唯一的选择是在Powershell和cmd.exe之间。但在Linux上,它有点复杂:

  1. 与您说的一样,您可以安装rxvtxterm
  2. 这不是唯一的问题 - 您可以使用任何窗口管理器。虽然这在这里无关紧要,
  3. 您可以使用Xorg或Wayland。继续,
  4. 您根本无法使用任何图形环境,例如在Linux控制台中运行一切!除非你使用像fbtermtmux这样的花哨程序,否则它几乎无法进行多任务处理,只能单独生成新窗口。
  5. 话虽这么说,你甚至可能根本不使用这台计算机,因为你是从SSH连接它的。这里也没有远程窗口(除非你使用东西作为X11转发)。
  6. 最后,您可以使用zshbashshfish等所有这些都有自己的特质。
  7. IMO最好的选择是在脚本中测试安装了哪些程序,或者在tmux等终端多路复用器周围编​​写脚本,并要求将其安装在目标计算机上。 tmux正在行动中:

    tmux in action

    (这适用于SSH,Linux控制台或上述任何其他场景。)

    但是,如果您不关心将要运行的命令的输出,您可以将它们从当前的终端会话中分离出来,如下所示:

    command1 &>/dev/null &
    command2 &>/dev/null &
    command3 &>/dev/null &
    

    请注意:

    1. 将并行运行命令。
    2. 不会向您显示任何输出。如果删除&>/dev/null,则每个命令的输出将相互缠绕,这可能不是您想要的。
    3. 关闭终端通常会杀死其子进程,在这种情况下,这会杀死在后台运行的command实例。
    4. 上面提到的问题可以解决,但我认为这个答案有点超出了范围。

      就我是否需要查看控制台输出而言,我个人会选择tmux或分离解决方案。