Відкрийте термінал з декількома вкладками та запустіть програму


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

Це працює і відкриває вікно терміналу з вкладками, але раптом воно закриється. Я не отримую жодних помилок.

Відповіді:


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, цю публікацію та цю публікацію, щоб зрозуміти зміни.

Я перевірив ці сценарії, і вони працюють.


Те саме, що я сказав, він просто відображається і закривається, і помилка також не стає. Як виправити це питання ?.
користувач172001

ок, тепер його відображаються вікна з вкладками, але не працює додаток на будь-якій вкладці. а також поясніть мені трохи, як це вирішило проблему з відображенням вікна.
користувач172001

@ user172001 Зараз він працює, перевіряйте нові зміни!
Radu Rădeanu

це досить класно. +1
Нішант

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'" 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.