Otwórz terminal z wieloma kartami i uruchom aplikację

16

Jestem nowy w skryptowaniu powłoki Linuksa. Chcę napisać skrypt powłoki, który otworzy terminal z wieloma kartami; powinien uruchomić aplikację kliencką rtsp na każdej karcie.

W tym celu przeszedłem tutaj pytanie na tym forum i próbowałem napisać kod poniżej,

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

To działa i otwiera okno terminala z kartami, ale nagle się zamknie. Nie otrzymuję żadnych błędów.

użytkownik172001
źródło

Odpowiedzi:

13

Użyj tego wariantu skryptu, aby robić, co chcesz:

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

Ogólnie taki skrypt:

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

otworzy nowy terminal z n zakładkami wykonującymi <command-line_or_script>w każdej zakładce. Może to być bardzo przydatne, gdy na przykład chcesz otworzyć terminal z niektórymi zakładkami z tłumaczem na określonej ścieżce (używając cd /pathpowyższego skryptu).

Ponadto, czytać man bash, ten post i ten post do zrozumienia zmian.

Przetestowałem te skrypty i działają.

Radu Rădeanu
źródło
Tak jak powiedziałem To po prostu wyświetla i zamyka, a także nie pojawia się błąd. Jak rozwiązać ten problem ?.
user172001
ok, teraz pokazuje okna z kartami, ale nie uruchamia aplikacji na żadnej karcie. i wyjaśnij mi trochę, jak to rozwiązało problem z wyświetlaniem okien.
user172001
@ user172001 Teraz działa, sprawdź nowe zmiany!
Radu Rădeanu
To jest całkiem niezłe. +1
Nishant,
1
Próbowałem dodać cmd1 && cmd2do ciągu poleceń, aby uruchomić wiele poleceń. Wydaje się, że działa tylko ten pierwszy. Czy robię coś rażąco nie tak?
byxor,
7

Wymyśliłem własną odpowiedź. Myślę, że jest to lepsze podejście, ponieważ:

  1. Rozumiem to Nie jestem ekspertem bash i nie podano żadnego wyjaśnienia w bardziej popularnych odpowiedzi na to, co jest ..., ${}, -e, lub@
  2. Umożliwia łatwe dostosowanie tytułu i polecenia dla każdej karty
  3. Czy powiedziałem, że łatwiej zrozumieć?

Zauważ, że ; $SHELLna końcu każdego polecenia gnome-terminal jest to, co utrzymuje okno terminala otwarte. W przeciwnym razie natychmiast się zamknie.

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
źródło