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

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"  

* odpowiedź t o podobne pytanie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *