Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本:打开多个终端并运行命令?_Linux_Bash_Shell - Fatal编程技术网

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

Linux Shell脚本:打开多个终端并运行命令?,linux,bash,shell,Linux,Bash,Shell,我正在尝试创建一个非常简单的shell脚本,它打开并运行我的程序的五个实例。对于batch,我将执行以下操作: @echo off python webstore.py 55530 python webstore.py 55531 python webstore.py 55532 exit command1 &>/dev/null & command2 &>/dev/null & command3 &>/dev/null &

我正在尝试创建一个非常简单的shell脚本,它打开并运行我的程序的五个实例。对于batch,我将执行以下操作:

@echo off
python webstore.py 55530
python webstore.py 55531
python webstore.py 55532
exit
command1 &>/dev/null &
command2 &>/dev/null &
command3 &>/dev/null &
这将打开三个终端,并使用不同的命令行参数在每个终端上运行命令。如何使用在每个基于unix的平台上运行的shell脚本创建相同的脚本?我见过一些打开终端的命令,但它们是特定于平台的(gnome termial、xterm等等)

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

你的要求有点不合理。这样想:在Windows上,您总是在其、周期内,您唯一的选择是在Powershell和
cmd.exe
之间。但在Linux上,它有点复杂:

  • 正如您所说,您可以安装
    rxvt
    xterm
  • 但这不是唯一的问题-您可以使用任何窗口管理器。虽然这在这里并不重要
  • 您可以使用Xorg或Wayland。继续,
  • 您根本不能使用任何图形环境,例如,在Linux控制台中运行一切!除非你使用像
    fbterm
    tmux
    这样的花式程序,否则它几乎不能同时处理多个任务,而且只能生成新的窗口
  • 也就是说,您甚至可能根本不使用这台计算机,因为您是从SSH连接到它的。这里也没有远程窗口(除非您使用东西作为X11转发)
  • 最后,您可以使用
    zsh
    bash
    sh
    fish
    等,它们都有自己的特点
  • 在我看来,最好的办法是在脚本中测试安装了哪些程序,或者在终端多路复用器(如
    tmux
    )周围编写脚本,并要求将其安装在目标机器上<代码>tmux正在运行:


    (来源:)

    (这将在SSH、Linux控制台或上述任何其他场景中工作。)

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

    @echo off
    python webstore.py 55530
    python webstore.py 55531
    python webstore.py 55532
    exit
    
    command1 &>/dev/null &
    command2 &>/dev/null &
    command3 &>/dev/null &
    
    请注意:

  • 将并行运行这些命令
  • 不会显示任何输出。如果删除
    &>/dev/null
    ,每个命令的输出都会相互干扰,这可能不是您想要的
  • 关闭终端通常会终止其子进程,在本例中,这将终止在后台工作的
    命令
    实例
  • 上面提到的问题是可以解决的,但我认为这有点超出了这个答案的范围


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

    我不知道这方面的完美解决方案。您可以通过
    $shell
    环境变量获得默认shell,但打开新终端与打开新终端窗口不同-使用
    exec“$shell”
    打开新shell也不应打开新窗口。您可以使用
    sudo-apt-get-install-xdoool
    xdoool-key-ctrl+shift+n
    -这可能是一种有点“跨发行版”的解决方案,因为大多数窗口管理器支持ctrl+shift+n打开新窗口签出(使用xdoool打开三个终端窗口并向它们发送命令)上一个列表中的第2点可以通过使用
    nohup
    来解决,不是吗?是的,但我认为它有点超出了问题的范围-我只是想简单介绍一下可能的选项,而不想太详细。