Откройте терминал с несколькими вкладками и выполните приложение

16

Я новичок в сценариях оболочки Linux. Я хочу написать скрипт оболочки, который откроет терминал с несколькими вкладками; он должен запустить клиентское приложение rtsp на каждой вкладке.

Для этого я рассмотрел вопрос здесь, на этом форуме, и попытался написать код, приведенный ниже,

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

Это работает и открывает окно терминала с вкладками, но вдруг оно закроется. Я не получаю никаких ошибок.

user172001
источник

Ответы:

13

Используйте этот вариант скрипта, чтобы делать то, что вы хотите:

#!/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

Как правило, такой скрипт:

#!/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

откроет новый терминал с n вкладками, выполняющими <command-line_or_script>в каждой вкладке. Это может быть очень полезно, когда вы хотите, например, открыть терминал с несколькими вкладками с интерпретатором по определенному пути (используя cd /pathв приведенном выше сценарии).

Кроме того , прочитайте man bash, этот пост и этот пост , чтобы понять изменения.

Я проверил эти сценарии, и они работают.

Раду Рэдяну
источник
Так же, как я сказал, он просто отображает и закрывает, и никаких ошибок также не получилось. Как решить эту проблему?
user172001
Хорошо, теперь отображаются окна с вкладками, но приложение не запущено ни на одной вкладке. а также объясните мне немного, как это исправило проблему отображения окна.
user172001
@ user172001 Теперь он работает, проверьте новые правки!
Раду Рэдяну
это довольно круто +1
Nishant
1
Я попытался добавить cmd1 && cmd2в командную строку, чтобы запустить несколько команд. Кажется, только запустить первый. Я делаю что-то явно неправильно?
byxor
7

Я придумал свой ответ. Я думаю, что это лучший подход, потому что:

  1. Я могу это понять. Я не эксперт Баш и никакое объяснение было дано в более популярным ответом на то , что это ..., ${}, -eили@
  2. Позволяет легко настроить заголовок и команду для каждой вкладки.
  3. Я говорил, что это намного легче понять?

Обратите внимание на то, что ; $SHELLв конце каждой команды gnome-terminal остается окно терминала открытым. В противном случае это немедленно закрылось бы.

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'" 
Габриэль Стейплс
источник