Saya mencoba menulis skrip untuk melakukan hal berikut:
- Buka jendela terminal yang menjalankan perintah yang berjalan lama
- (Idealnya) pindahkan jendela terminal ke sudut kiri atas layar menggunakan xdotool
- Tutup jendela terminal hanya jika perintah lama berjalan keluar dengan kode pengembalian nol
Untuk memasukkannya ke dalam istilah Windows, saya ingin memiliki setara Linux start cmd /c long_running_cmd
jika long_running_cmd
berhasil, dan melakukan yang setara start cmd /k long_running_cmd
jika gagal.
Apa yang saya miliki sejauh ini adalah skrip yang memulai xterm dengan perintah yang diberikan, dan kemudian memindahkan jendela sesuai keinginan:
#!/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
Dan ~ / bin / launcher.sh dimaksudkan untuk menjalankan apa pun yang dilewatkan sebagai argumen baris perintah untuk itu:
#!/bin/bash
# execute command line arguments
$@
Tapi, saya belum bisa menutup jendela xterm setelah long_running_cmd
selesai.
Saya pikir sesuatu seperti xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &
mungkin yang saya cari, sehingga xterm diluncurkan di latar belakang dan berjalan ./long_running_cmd && kill $PPID
. Jadi shell di jendela xterm kemudian menjalankan perintah long running dan jika berhasil, proses induk dari shell (yaitu proses yang memiliki jendela xterm) terbunuh, sehingga menutup jendela xterm.
Tapi, itu tidak berhasil: tidak ada yang terjadi, jadi saya curiga kutipan atau pelarian saya salah, dan saya belum bisa memperbaikinya.
Pendekatan alternatif adalah untuk mendapatkan PID long_running_cmd
, gunakan wait
untuk menunggu sampai selesai, kemudian bunuh menggunakan jendela xterm kill $!
(karena $!
merujuk pada tugas terakhir yang dimulai di latar belakang, yang akan menjadi jendela xterm). Tetapi saya tidak dapat menemukan cara yang bagus untuk mendapatkan PID & nilai long_running_cmd
keluar dari shell yang berjalan di jendela xterm dan ke dalam shell yang meluncurkan jendela xterm (singkat menuliskannya ke file di suatu tempat, yang sepertinya seperti itu seharusnya tidak perlu?).
Apa yang saya lakukan salah, atau adakah cara yang lebih mudah untuk mencapai ini?
Jawaban:
PETUNJUK! Anda dapat memverifikasi kode keluar dari perintah yang dieksekusi sebelumnya:
sumber