Saya ingin tahu cara termudah untuk membuat skrip bash yang akan menjalankan aplikasi di MacOSX (ini adalah sistem berbasis UNIX jadi saya menganggap ini adalah tempat yang tepat). tunggu program untuk keluar. Jika jalan keluarnya tidak macet, jalankan lagi. Kalau tidak biarkan jendela laporan kerusakan terbuka dan keluar.
Saya ingin skrip ini berjalan selamanya sampai crash atau penghentian manual.
Saya punya ide yang kabur tetapi tidak yakin. Inilah yang saya miliki sejauh ini:
echo "Launching Autorun…"
if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
exit
fi
bash
shell-script
osx
Ben Crazed Up Euden
sumber
sumber
Jawaban:
Inilah yang dilakukan Bash saat loop :
Ini akan menjalankan aplikasi, dan jika itu berakhir dengan sukses menjalankan tubuh loop.
:
adalah perintah no-op shell (loop harus memiliki body, jadi itulah yang kita letakkan di sana); setelah itu kembali ke atas dan menjalankan program lagi. Jika gagal, loop berhenti berjalan dan skrip keluar.Namun, sepertinya yang Anda jalankan mungkin aplikasi Mac biasa (
.app
): ada beberapa masalah yang muncul dalam kasus itu. Salah satunya adalah bahwa Anda perlu menggunakanopen
perintah , daripada menjalankan direktori aplikasi langsung:open /path/to/application.app
.Yang lain adalah bahwa ketika Anda melakukannya
open
biasanya akan segera berakhir dengan sukses, terlepas dari apa yang harus dilakukan aplikasi: itu tidak sepenuhnya universal, tetapi sebagian besar akan. Jika salah satu Anda tidak, Anda dapat menggunakan-W
opsi untuk memaksaopen
untuk memblokir sampai ujung aplikasi:open -W /path/to/application.app
. Perhatikan bahwa jika aplikasi sudah berjalan, ini akan menunggu sampai eksekusi yang ada juga berakhir.Berapa banyak masalah yang tergantung pada aplikasi apa yang Anda jalankan. Jika itu tidak berfungsi dengan baik, melakukan ini dari shell mungkin bukan pilihan terbaik. Dalam hal ini Anda mungkin lebih baik menggunakan AppleScript, yang dapat Anda tanyakan di Ask Different .
sumber
open
hanya mengembalikan kegagalan untuk kesalahan startup tertentu. Aplikasi dimulai oleh layanan sistem, bukan secara langsung, sehingga tidak ada saluran komunikasi langsung kembali. Kadang-kadang mungkin untuk memulai eksekusi aplikasi secara langsung:/Applications/YourProgram.app/Contents/MacOS/YourProgram
. Kalau tidak, kami keluar dari Unix dan ke tempat-tempat Anda akan mendapatkan jawaban yang lebih baik pada Ask Different . Anda dapat menjalankan AppleScript dari shell denganosascript
Saya sudah menguji ini:
Ini bekerja dengan menguji kode kembali perintah Anda, gaya POSIX. 0 berarti OK, hal lain dapat dianggap sebagai kesalahan.
sumber