Откройте терминал с несколькими вкладками и выполните приложение
Я новичок в сценариях оболочки 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
Это работает и открывает окно терминала с вкладками, но вдруг оно закроется. Я не получаю никаких ошибок.
2 ответа
Я придумал свой ответ. Я думаю, что это лучший подход, потому что:
- Я могу это понять. Я не эксперт по Bash, и в более популярном ответе не было дано никакого объяснения
...
,${}
,-e
, или же@
- Позволяет легко настроить заголовок и команду для каждой вкладки.
- Я говорил, что это намного легче понять?
Обратите внимание, что ; $SHELL
в конце каждой команды gnome-терминала есть то, что держит окно терминала открытым. В противном случае это немедленно закрылось бы.
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'"
Используйте этот вариант скрипта, чтобы делать то, что вы хотите:
#!/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
, этот пост и этот пост, чтобы понять изменения.
Я проверил эти сценарии, и они работают.