2013-07-02 6 views
2

Я новичок в скрипте linux shell. Я хочу написать сценарий оболочки, который откроет терминал с несколькими вкладками. И в каждой вкладке он должен запускать одно клиентское приложение 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 

Его исполнение хорошо, но он будет открыт терминалом и сразу же она закрывается. (Я не получаю ошибку) Если я заменил линию foo=... с gnome-terminal --tab -e $cmd затем его рабочим отлично, но открывает независимый терминал.

подскажите, как исправить это.

спасибо

+1

Я не думаю, что вам нужен один 'gnome-terminal' с несколькими аргументами' --tab'; скорее, вам нужны несколько вызовов 'gnome-terminal -tab'. – trojanfoe

+0

Я прочитал один блог, который говорит, поместите все команды в strig и передайте его в gnome-terminal. он откроет вкладки и запустит приложение. Вот почему я пытаюсь это сделать. Мне нужно открыть более 100 вкладок для моего тестирования. много раз писать -tab -e не будет хорошо. – user1241903

+1

Возможно, вы правы, но я не думаю, что это будет иметь большое значение для производительности, как я предлагаю. Попробуй хотя бы попробовать. – trojanfoe

ответ

4

Вы должны всегда (всегда!) Использовать массив для создания списка аргументов в Bash.

То есть:

#!/bin/bash 
# ^^ this has to be bash, not /bin/sh, for arrays to work 
cmd=(gnome-terminal) 
for ((i=0; i<5; i++)); do 
    cmd+=(--tab-with-profile=Default -e "java RunRTSPClient") 
done 
"${cmd[@]}" 

Это даст вам точный эквивалент бега:

gnome-terminal \ 
    --tab-with-profile=Default -e "java RunRTSPClient" \ 
    --tab-with-profile=Default -e "java RunRTSPClient" \ 
    --tab-with-profile=Default -e "java RunRTSPClient" \ 
    --tab-with-profile=Default -e "java RunRTSPClient" \ 
    --tab-with-profile=Default -e "java RunRTSPClient" 

... что то, что я понимаю, что ты хочешь.

Попытка построить сложную команду в строке вызывает очень плохие вещи; прочитайте http://mywiki.wooledge.org/BashFAQ/050, чтобы понять, почему.

+1

его работа, но что зафиксировало немедленное закрытие окна ?, объясните мне немного. а также что это делает «$ {cmd [@]}». Спасибо – user1241903

+0

@ user1241903 Проблема «немедленного закрытия окна» - вопрос, связанный с гном-терминами, а не вопрос bash. Возьмите его с тем, кто написал сообщение в блоге, говоря, что гном-терминал может быть использован именно так. '' $ {cmd [@]} "' расширяет список записей в массиве 'cmd', не меняя границ между этими элементами каким-либо образом. В этом случае массив 'cmd' содержит команду gnome-terminal, которую вы хотите запустить. –

Смежные вопросы