Mam skrypt, który działa w tle (bez okien terminala lub TTY) i czasami coś robi.
Teraz chcę, aby robił inną rzecz, gdy coś robi, a mianowicie otwiera okno terminala Gnome i wykonuje 2 polecenia. Właściwie potrzebuję tylko wykonać 1 polecenie, ale chcę, aby okno terminala pozostało otwarte, aby zobaczyć dane wyjściowe polecenia. Polecenie drukuje zarówno na stdout, jak i stderr, a jego dane wyjściowe zmieniają się w czasie, więc samo zapisanie go do pliku i wysłanie jakiegoś rodzaju powiadomienia nie wykonałoby zadania zbyt dobrze.
Mogę zmusić Gnome Terminal do otwórz okno i wykonaj 1 polecenie:
gnome-terminal -e "sleep 10"
Dla uproszczenia wybrałem sleep
jako długotrwałe polecenie. Jednak podczas dodawania kolejnego polecenia nie otwiera się żadne okno terminala:
gnome-terminal -e "echo test; sleep 10"
Jakie jest rozwiązanie tego problemu?
Komentarze
- Powiązane: askubuntu.com/questions/315408/… i askubuntu.com/questions/20330/…
Odpowiedź
gnome-terminal
traktuje wszystko w cudzysłowie jako jedno polecenie, więc aby uruchomić wiele z nich po kolei, musisz uruchom interpreter (zwykle powłokę) i rób w nim rzeczy, na przykład:
gnome-terminal -e "sh -c "echo test; sleep 10""
Przy okazji, możesz chcieć, aby okno pozostało otwarte nawet po zakończeniu pracy poleceń, w takim przypadku po prostu uruchom nową powłokę lub zamień bieżącą na nową:
gnome-terminal -e "sh -c "echo test; sleep 10; exec bash""
Komentarze
- # Opcja „-e” jest przestarzała i może zostać usunięta w późniejszej wersji gnome-terminal. # # Użyj „-”, aby zakończyć opcje i wstaw wiersz poleceń do wykonania po nim. # Ten błąd występuje teraz. Ale jeśli zamienisz -e na -, nowy terminal, który się pojawi, wyświetli błąd. Jak poprawnie używać -?
- @ eric.frederich na podstawie odpowiedzi na pytanie ze stackoverflow, uważam, że składnia powinna być
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
Odpowiedź
Od stycznia 2020 r. -e
opcja w gnome-terminal
nadal działa, ale generuje ostrzeżenie
# Opcja „-e” jest przestarzała i może zostać usunięta w późniejszej wersji gnome-terminal.
# Użyj „-”, aby zakończyć opcje i wstaw wiersz poleceń do wykonania po nim.
Możesz uruchomić te dwie komendy bez ostrzeżenia za pomocą
gnome-terminal -- /bin/sh -c "echo test; sleep 10"
I, jak wspomniano w tej odpowiedzi , jeśli chcesz, aby okno pozostało otwarte później, możesz zrobić
gnome-terminal -- /bin/sh -c "echo test; sleep 10; exec bash"