Sto provando a scrivere una sceneggiatura per fare quanto segue:
- Aprire una finestra del terminale che esegue un comando di lunga durata
- (Idealmente) sposta la finestra del terminale nell'angolo in alto a sinistra dello schermo usando xdotool
- Chiudere la finestra del terminale solo se il comando long running è uscito con un codice di ritorno zero
Per dirla in termini di Windows, mi piacerebbe avere l'equivalente di Linux in start cmd /c long_running_cmd
caso di long_running_cmd
successo, e fare l'equivalente di start cmd /k long_running_cmd
se non riesce.
Quello che ho finora è uno script che avvia xterm con un determinato comando, quindi sposta la finestra come desiderato:
#!/bin/bash
# open a new terminal window in the background with the long running command
xterm -e ~/bin/launcher.sh ./long_running_cmd &
# move the terminal window (requires window process to be in background)
sleep 1
xdotool search --name launcher.sh windowmove 0 0
E ~ / bin / launcher.sh ha lo scopo di eseguire tutto ciò che gli viene passato come argomento della riga di comando:
#!/bin/bash
# execute command line arguments
$@
Ma non sono stato in grado di chiudere la finestra di xterm dopo aver long_running_cmd
finito.
Penso che qualcosa del genere xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &
potrebbe essere quello che sto cercando, in modo che xterm venga lanciato in background e funzioni ./long_running_cmd && kill $PPID
. Quindi la shell nella finestra xterm esegue quindi il comando long running e se si completa correttamente, il processo parent della shell (cioè il processo che possiede la finestra xterm) viene ucciso, chiudendo così la finestra xterm.
Ma ciò non funziona: non succede nulla, quindi sospetto che il mio preventivo o il mio escape non siano corretti e non sono stato in grado di risolverlo.
Un approccio alternativo sarebbe quello di ottenere il PID di long_running_cmd
, usare wait
per aspettare che finisca, quindi uccidere la finestra xterm usando kill $!
(poiché si $!
riferisce all'ultima attività avviata in background, che sarà la finestra xterm). Ma non riesco a trovare un buon modo per ottenere il PID e uscire dal valore della long_running_cmd
shell in esecuzione nella finestra xterm e nella shell che ha lanciato la finestra xterm (a meno di scriverli in un file da qualche parte, che sembra che sia dovrebbe essere inutile?).
Cosa sto sbagliando o c'è un modo più semplice per farlo?