Am un script care rulează în fundal (fără ferestre de terminal sau TTY) și ocazional face ceva.
Acum vreau să facă un alt lucru atunci când face ceva și este să deschid o fereastră Gnome Terminal și să execute 2 comenzi. De fapt, trebuie doar să execut o comandă, dar vreau să fac fereastra terminalului să rămână deschisă, astfel încât să pot vedea ieșirea comenzii. Comanda tipărește atât pe stdout, cât și pe stderr, iar ieșirea sa se modifică în timp, așa că doar scrierea acestuia într-un fișier și trimiterea unui fel de notificare nu ar face treaba foarte bine.
Pot obține Gnome Terminal la deschideți o fereastră și executați 1 comandă:
gnome-terminal -e "sleep 10"
Am ales sleep
ca comandă de lungă durată pentru simplitate. Cu toate acestea, atunci când adăugați o altă comandă, nu se deschide nicio fereastră de terminal:
gnome-terminal -e "echo test; sleep 10"
Care este soluția la acest lucru?
Comentarii
- Corelat: askubuntu.com/questions/315408/… și askubuntu.com/questions/20330/…
Răspuns
gnome-terminal
tratează totul între ghilimele ca o singură comandă, deci pentru a rula multe dintre ele consecutiv trebuie să începeți interpretul (de obicei un shell) și faceți lucruri în interiorul acestuia, de exemplu:
gnome-terminal -e "sh -c "echo test; sleep 10""
BTW, poate doriți ca fereastra să rămână deschisă chiar și după ce comenzile își termină treaba, în acest caz pur și simplu porniți un shell nou sau înlocuiți un curent cu cel nou:
gnome-terminal -e "sh -c "echo test; sleep 10; exec bash""
Comentarii
- # Opțiunea „-e” este depreciată și ar putea fi eliminată într-o versiune ulterioară a gnome-terminal. # # Folosiți „-” pentru a termina opțiunile și puneți linia de comandă pentru a executa după ea. # Această eroare se întâmplă acum. Dar dacă înlocuiți -e cu -, noul terminal care apare dă o eroare. Cum se folosește corect -?
- @ eric.frederich bazat pe acest răspuns la o întrebare de la stackoverflow, cred că sintaxa ar trebui să fie
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
Răspuns
Începând cu ianuarie 2020, -e
din gnome-terminal
funcționează încă, dar lansează avertismentul
# Opțiunea „-e” este depreciată și ar putea fi eliminată într-o versiune ulterioară a gnome-terminal.
# Utilizați „-” pentru a termina opțiunile și a pune linia de comandă să se execute după ea.
Puteți rula cele două comenzi fără avertisment cu
gnome-terminal -- /bin/sh -c "echo test; sleep 10"
Și, așa cum se menționează în acest răspuns , dacă doriți ca fereastra să rămână deschisă după aceea, puteți face
gnome-terminal -- /bin/sh -c "echo test; sleep 10; exec bash"