Öffnen Sie das Terminal mit mehreren Registerkarten und führen Sie die Anwendung aus

15

Ich bin neu in Linux Shell Scripting. Ich möchte ein Shell-Skript schreiben, das ein Terminal mit mehreren Registerkarten öffnet. Auf jeder Registerkarte sollte die RTSP-Client-App ausgeführt werden.

Dafür habe ich hier in diesem Forum die Frage durchgegangen und versucht, wie unten zu codieren,

tab="--tab-with-profile=Default -e "
cmd="java RunRTSPClient"
for i in 1 2 3 4 5
   do
#   
   foo="$foo $tab $cmd"         
   done
gnome-terminal $foo
exit 0

Dies wird ausgeführt und öffnet das Terminalfenster mit Registerkarten, wird jedoch plötzlich geschlossen. Ich erhalte keine Fehler.

user172001
quelle

Antworten:

12

Verwenden Sie diese Variante des Skripts, um das zu tun, was Sie wollen:

#!/bin/bash

tab="--tab-with-profile=Default"
cmd="bash -c 'java RunRTSPClient';bash"
foo=""

for i in 1 2 3 4 5; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

Im Allgemeinen ein Skript wie folgt:

#!/bin/bash

tab="--tab"
cmd="bash -c '<command-line_or_script>';bash"
foo=""

for i in 1 2 ... n; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

öffnet ein neues Terminal mit n Registerkarten, auf denen das <command-line_or_script>in jeder Registerkarte ausgeführt wird. Dies kann sehr nützlich sein, wenn Sie beispielsweise ein Terminal mit einigen Registerkarten mit dem Interpreter unter einem bestimmten Pfad öffnen möchten (Verwendung cd /pathim obigen Skript).

Lesen Sie man bashauch diesen Beitrag und diesen Beitrag , um die Änderungen zu verstehen.

Ich habe diese Skripte getestet und sie funktionieren.

Radu Rădeanu
quelle
Das gleiche wie ich gesagt habe Es wird nur angezeigt und geschlossen und es wird auch kein Fehler angezeigt. Wie kann dieses Problem behoben werden?
user172001
OK, jetzt werden die Fenster mit Registerkarten angezeigt, die App wird jedoch in keiner Registerkarte ausgeführt. und erkläre mir auch ein bisschen, wie dies das Problem mit der Fensteranzeige behoben hat.
user172001
@ user172001 Jetzt funktioniert es, überprüfe die neuen Änderungen!
Radu Rădeanu
das ist ziemlich cool. +1
Nishant
1
Ich habe versucht, cmd1 && cmd2in die Befehlszeichenfolge mehrere Befehle auszuführen. Es scheint nur der erste zu laufen. Mache ich etwas krass falsch?
Bis
6

Ich habe meine eigene Antwort gefunden. Ich denke, das ist ein besserer Ansatz, weil:

  1. Ich kann das verstehen. Ich bin kein Experte bash und keine Erklärung wurde in der populäreren Antwort gegeben für das, was ist ..., ${}, -e, oder@
  2. Sie können den Titel und den Befehl für jede Registerkarte einfach anpassen
  3. Habe ich gesagt, es ist viel einfacher zu verstehen?

Beachten Sie, dass ; $SHELLam Ende jedes gnome-terminal-Befehls das Terminalfenster geöffnet bleibt. Sonst würde es sofort schließen.

title1="tab 1"
title2="tab 2"
title3="tab 3"

cmd1="cd /etc"
cmd2="cd ~/Documents"
cmd3="cd /usr/local"

gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $SHELL'" \
               --tab --title="$title2" --command="bash -c '$cmd2; $SHELL'" \
               --tab --title="$title3" --command="bash -c '$cmd3; $SHELL'" 
Gabriel Staples
quelle