otwórz terminal gnome z kilkoma kartami i wykonaj kilka poleceń na każdej karcie

12

Oto, co chcę osiągnąć:

  1. Chcę otworzyć terminal gnome z pięcioma zakładkami
  2. Chcę uruchomić zestaw poleceń (5–10 poleceń) na każdej karcie automatycznie.
    Pierwsza zakładka: ustawia przejrzysty widok, a następnie wykonuje jedno lub więcej poleceń.
    Druga zakładka: loguje się na serwerze i wykonuje niektóre polecenia.
    Trzecia zakładka: wykona tylko niektóre polecenia

gnome-terminal --geometry=260x25-0+0 --tab -e "csh -c \"ct setview myViewName; cal\"" –tab --tab --tab (działa dobrze, widok jest ustawiony, ale po tym nie jest wykonywane żadne polecenie)

Próbowałem zrobić to w ten sposób i uruchomiłem to w skrypcie poniżej:

gnome-terminal --geometry 125x18-0-26 --tab -t "some title" -e /home/ekido/Desktop/MyScripts/myScript

#!/usr/bin/expect
exec gnome-terminal --geometry 125x49-0+81 –tab
spawn ssh usert@server
expect "password"
send "*******\r"
expect "user@server100:~>"
send “some command\r"
expect "user@server100:~>"
send “some command"
interact 

Jeśli usunę exec gnome-terminal --geometry 125x49-0+81 –tabwiersze z przykładu i wywołam skrypt z innego pliku, to zadziała dobrze - zaloguję się na serwerze i wykonam wszystkie polecenia. Czy ktoś może mi pomóc rozwiązać ten problem?

Napisanie skryptu, który wywołuję dla każdej karty, nie jest opcją, ponieważ na końcu będę miał 5 terminali z 5-7 kartami, a to oznacza, że ​​pisanie skryptów to od 25 do 30 (kosztuje więcej niż pomaga w moim problemie).

ekido
źródło
Nie dlatego, że jestem ekspertem w GNOME Terminal, ale zakładki, które tworzysz, powinny być zapisane w profilu. Po utworzeniu profilu sądzę, że możesz go napisać. Zobacz Zarządzanie profilami w pomocy GNOME.
eyoung100

Odpowiedzi:

11

To wydaje się działać na moim komputerze:

gnome-terminal --geometry=260x25-0+0 --tab -e "bash -c 'date; read -n1'" --tab -e "bash -c 'echo meow; read -n1' " --tab --tab

Uwaga: jak tylko procesy uruchomione przez -e zostaną uruchomione, zostaną zakończone. W tym przypadku bash jest ładowany, uruchamia wszelkie przekazane mu polecenia i natychmiast istnieje. Wstawiam instrukcje read, aby czekać na dane wejściowe użytkownika. W ten sposób karty nie zostaną zamknięte, dopóki nie naciśniesz klawisza, tak abyś mógł to zobaczyć w tym przykładzie. Bez nich wyglądałoby to tak, jakby otworzyły się tylko dwie zakładki, ponieważ pozostałe dwie wykonałyby się i zamknęły zbyt szybko.

Unix-Ninja
źródło
dzięki za odpowiedź. Pewnie, widzę dane wyjściowe jednego polecenia (w tym przypadku „data”), ale chciałbym wykonać kilka poleceń, móc zobaczyć dane wyjściowe, a następnie nadal ręcznie pisać nowe polecenia na tej samej karcie.
ekido
3

Ponieważ bash kończy się po zakończeniu komendy, możesz wywołać inną instancję bashpo komendzie, aby uzyskać interaktywną powłokę:

gnome-terminal  --tab -e "bash -c 'ps -ef; bash'" --tab -e "bash -c 'ls; bash'" --tab -e "bash -c 'top -n 1; bash'"
Jean Spector
źródło
wydaje się, że jeśli zamknę terminal, podstawowe procesy nie zostaną automatycznie zamknięte, czy istnieje również rozwiązanie tego problemu? Chciałbym zamknąć całe okno, a wszystkie karty z ich procesami powinny zostać
zabite
2

Zapisz poniżej jako script.sh

#!/usr/bin/env bash

me=$(realpath $0)

commands=(
"echo"
"ls -l && echo 'yes'"
"top"
"ps"
)
len=${#commands[@]}

if [ $# -eq 0 ];then
    num=$len
else
    num=$1
fi

n=$((len-num))
command=${commands[$n]}
num=$((num-1))

xdotool key ctrl+shift+t

if [ $num -gt -1 ]; then
    sleep 1; xdotool type --delay 1 --clearmodifiers "$me $num; ${command}"; xdotool key Return;
fi

dodaj skrypt.sh do $ PATH, a następnie uruchom go

gnome-terminal -x script.sh

Zobacz Otwieranie nowej karty w gnome-terminalu za pomocą wiersza poleceń .

rofrol
źródło
wszystko inne zawiodło poza tym. Teraz chciałbym, aby niektóre karty były otwarte bez polecenia. Na przykład chciałbym mieć otwarte dziesięć kart, ale trzy, jeśli mogłyby uruchamiać niektóre polecenia, takie jak htop ..
nyxee