Programowo otwórz kartę w gnome-terminal, wykonaj polecenie i pozostaw kartę otwartą

12

Próbuję napisać polecenie, które uruchomi kilka kart terminalu, wykona coś na każdej karcie i sprawi, że każda karta pozostanie otwarta po zakończeniu polecenia, więc mogę spojrzeć na dane wyjściowe i wpisać więcej poleceń na każdej karcie

coś takiego:

gnome-terminal --tab -e "ls -a" --tab -e "ls"

ale problem polega na tym, że karty zamykają się, gdy tylko kończą się polecenia „ls”. Czy ktoś wie, jak sprawić, by karty pozostały otwarte?

znak
źródło

Odpowiedzi:

11

Gnome-terminal może wykonać polecenie lub otworzyć powłokę, ale nie jedno i drugie.

Istnieje obejście tego problemu, polegające na kapsułkowaniu polecenia i późniejszym wywołaniu powłoki w jednym poleceniu.

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

Aby uzyskać więcej alternatyw, przeczytaj moją odpowiedź na podobne pytanie dotyczące przepełnienia stosu: /programming/3512055/avoid-gnome-terminal-close-after-script-execution/3531426#3531426

lesmana
źródło
10

Jeśli masz xdotooli wmctrlzainstalowałeś, może działać następujący skrypt powłoki:

#!/usr/bin/env bash

window="$(xdotool search --class gnome-terminal | head -1)"
xdotool windowfocus $window
xdotool key ctrl+shift+t
xdotool type "$*"
xdotool key Return

Używam tego w ten sposób:

$ run-in-new-tab 'ls -l'

Ten pomysł znalazłem na blogu Trustin Lee .


źródło
Dzięki. To działa całkiem dobrze. Muszę jednak dodać sleep 1po ctrl + shift + t, aby to dla mnie zadziałało. Zaakceptuję to, jeśli wkrótce nie pojawi się nic więcej
Tak - stwierdziłem, że musiałem sleep 2sprawić, by działał w 100% przypadków. Świetne rozwiązanie - teraz otwieram 8 kart, które ssh na różnych serwerach, uruchamiają różne procesy itp., Wykorzystując to: moja poranna konfiguracja jest teraz całkowicie skryptowana :)
Max Williams
W rzeczywistości wmctrlnie jest wymagane.
nedim