Buka jendela terminal & jalankan perintah, lalu tutup jendela terminal jika perintah berhasil diselesaikan?


0

Saya mencoba menulis skrip untuk melakukan hal berikut:

  1. Buka jendela terminal yang menjalankan perintah yang berjalan lama
  2. (Idealnya) pindahkan jendela terminal ke sudut kiri atas layar menggunakan xdotool
  3. 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_cmdjika long_running_cmdberhasil, dan melakukan yang setara start cmd /k long_running_cmdjika 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_cmdselesai.

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 waituntuk 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_cmdkeluar 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?


Apakah 'keluar' tidak berfungsi? bekerja dengan skrip saya.
captain_G

Jawaban:


1

PETUNJUK! Anda dapat memverifikasi kode keluar dari perintah yang dieksekusi sebelumnya:

if [ $? -eq 0 ]
then
  exit 0
fi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.