如何编写shell脚本来打开四个终端并在每个终端中执行一个命令?

时间:2017-02-24 17:18:52

标签: linux shell unix scripting xterm

所以我试图创建一个shell脚本来打开四个终端窗口(最好是konsoles)并在每个窗口中运行一个命令,然后保持每个终端打开,这样我就可以继续执行命令了。期望的。

我尝试按照此处列出的说明操作:

  1. How to create a shell script to launch 3 terminals and execute a set of commands in each?
    1. How can I make a script that opens terminal windows and executes commands in them?
    2. 在尝试了这些细节后,我所拥有的最好的是:

      !/bin/bash
      # Shell script to open terminals
      # and execute a separate command in each
      
      # Commands to run (one per terminal)
      cmds=('echo 'hello1'', 'echo 'hello2'')
      
      # Loop through commands, open terminal, execute command
      for i in "${cmds[@]}"
      do
          xterm -e "$i && /bin/tcsh" &
      done
      

      编辑: 使用Roberto的答案,我得到了四个这样的终端,但我无法输入其他命令,请注意没有像#34; mycomputername>这样的提示。 ":

      enter image description here

      编辑2:

      我找到了一种更好的方法来做我想做的事。下面的脚本将在单独的终端中执行cmds数组中列出的命令。所以回声' hello1'将在一个终端运行,并回复' hello2'将在另一个终端运行。这将继续使用cmds数组中列出的许多命令

      for(int i=0;i<n-1;++i)
          for(int k=i+1;k<n;++k)
             sum += a[i] * a[k];
      

4 个答案:

答案 0 :(得分:1)

您可以使用&#34; for&#34;循环,和&#34;&amp;&#34;在后台运行xterm:

#!/bin/bash

# some older test, doesn't work and complains and I get this message on command line: "QApplication::qAppName: Please instantiate the QApplication object first"
# I also can't enter text after command executes
#echo "Hello World!"
#exec konsole --noclose -e cat ~/.aliases

for i in 1 2 3 4
do
# opens terminal but then I can't control terminal afterwards
xterm -hold -e "echo Hello My World" &
done

# didn't do anything
#exit 0

# didn't do anything except make me type exit an extra time where I executed my shell script
#$SHELL

答案 1 :(得分:0)

Konsole

多个窗口

#!/usr/bin/env bash
konsole --noclose -e echo Hello terminal 1! &
konsole --noclose -e echo Hello terminal 2! &
konsole --noclose -e echo Hello terminal 3! &
konsole --noclose -e echo Hello terminal 4! &

多个标签

#!/usr/bin/env bash
konsole --noclose --new-tab -e echo Hello terminal 1! &
konsole --noclose --new-tab -e echo Hello terminal 2! &
konsole --noclose --new-tab -e echo Hello terminal 3! &
konsole --noclose --new-tab -e echo Hello terminal 4! &

答案 2 :(得分:0)

在Linux Mint mate 发行版上,它将在3个独立的终端窗口中运行<commands>

$ cat START.sh

mate-terminal --execute bash -c "<command1>" 
mate-terminal --execute bash -c "<command2>" 
mate-terminal --execute bash -c "<command3>" 

杀死 START.sh 不会终止子级<commands>

答案 3 :(得分:0)

我发现这很容易:

#!usr/bin/env bash
echo "Enter the value of n:"
read n
for ((i = 0; i < n; i++ ))
do 
   xterm -hold -e <enter command> &
   # In my case, I used : 
   # xterm -hold -e sar -P $i 2 5 &
done

差不多就可以了!祝你有美好的一天:)

注意:对于新手,我们将其保存为文件名'。sh'。另外,请注意,这将在n个不同的终端上执行n个不同的命令。如果需要,可以在每个终端上执行相同的命令,只需从in do .... done部分中删除$ i;)