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

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"  

* răspuns t o o întrebare similară

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *