Jeg har et skript som kjører i bakgrunnen (uten terminalvinduer eller TTY) og av og til gjør noe.
Jeg vil nå at den skal gjøre en annen ting når den gjør noe, og det er å åpne et Gnome Terminal-vindu og utføre 2 kommandoer. Egentlig trenger jeg bare å utføre en kommando, men jeg vil gjøre at terminalvinduet holder åpent slik at jeg kan se utdataene fra kommandoen. Kommandoen skrives ut både på stdout og stderr, og dens utgang endres over tid, så bare å skrive den til en fil og sende en slags varsel ville ikke gjøre jobben veldig bra.
Jeg kan få Gnome Terminal til åpne et vindu og utfør en kommando:
gnome-terminal -e "sleep 10"
Jeg valgte sleep
som den langvarige kommandoen for enkelhets skyld. Når du legger til en ny kommando, åpnes det imidlertid ikke et terminalvindu:
gnome-terminal -e "echo test; sleep 10"
Hva er løsningen på dette?
Kommentarer
- Relatert: askubuntu.com/questions/315408/… og askubuntu.com/questions/20330/…
Svar
gnome-terminal
behandler alt i anførselstegn som en kommando, så for å kjøre mange av dem fortløpende må du start tolk (vanligvis et skall), og gjør ting inne i det, for eksempel:
gnome-terminal -e "sh -c "echo test; sleep 10""
BTW, kanskje du vil at vinduet skal være åpent selv etter at kommandoer er ferdig med jobben, i så fall er det bare å starte nytt skall, eller erstatte en strøm med den nye:
gnome-terminal -e "sh -c "echo test; sleep 10; exec bash""
Kommentarer
- # Alternativ “-e” er utfaset og kan bli fjernet i en senere versjon av gnome-terminal. # # Bruk “-” for å avslutte alternativene og sette kommandolinjen til å utføre etter den. # Den feilen skjer nå. Men hvis du bytter ut -e med -, gir den nye terminalen som kommer opp en feil. Hvordan bruke riktig??
- @ eric.frederich basert på dette svaret på et spørsmål ved stackoverflow, jeg tror syntaksen skal være
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
Svar
Fra og med januar 2020 vil -e
alternativet i gnome-terminal
fungerer fremdeles, men kaster advarselen
# Alternativ “-e” er utfaset og kan bli fjernet i en senere versjon av gnome-terminal.
# Bruk “-” for å avslutte alternativene og sette kommandolinjen til å utføre etter den.
Du kan kjøre de to kommandoene uten advarsel med
gnome-terminal -- /bin/sh -c "echo test; sleep 10"
Og som nevnt i dette svaret , hvis du vil at vinduet skal være åpent etterpå, kan du gjøre
gnome-terminal -- /bin/sh -c "echo test; sleep 10; exec bash"