انتظر حتى يتم الخروج من تطبيق معين، ثم قم بتشغيل تطبيق آخر

StackOverflow https://stackoverflow.com//questions/24018890

  •  21-12-2019
  •  | 
  •  

سؤال

في نظام التشغيل OS X، أرغب في تنفيذ أمر osascript الذي ينتظر حتى يتم الخروج من تطبيق معين محدد بواسطة مسار .app الكامل الخاص به، ثم بدء تشغيل تطبيق آخر، على سبيل المثال.استخدام /usr/bin/open -n /Applications/MyApp.app.

كيفية تحقيق الانتظار حتى الخروج من التطبيق؟

هل كانت مفيدة؟

المحلول

النهج الشائع هو إجراء حلقة انتظار، على سبيل المثال باستخدام pgrep:

while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done

لسوء الحظ، سيؤدي هذا إلى النوم كثيرًا ويؤخر بدء التطبيق الآخر.

وبدلاً من ذلك، إذا كنت تعلم أن التطبيق قيد التشغيل، فيمكنك استخدامه /usr/bin/open:

open -g -W /Applications/TextEdit.app

لسوء الحظ، سيؤدي هذا إلى فتح التطبيق إذا لم يكن قيد التشغيل.يمكنك التحقق من أنه قيد التشغيل قبل الاتصال /usr/bin/open, ، لكن هذا لن يكون ذريًا:من الممكن أن يتم إغلاقه ويمكن للأمر المفتوح إعادة تشغيله.

يمكن تغليف كلاهما في osascript (على الرغم من أنه ربما لا يكون له معنى كبير).

osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'

كملاحظة جانبية: open -W في الواقع ينفذ انتظار kqueue (انتظار غير استقصاء) في العملية.قد تكون هناك أوامر أخرى تستدعي kqueue وتؤدي نفس المهمة دون المخاطرة بإعادة تشغيل التطبيق.من السهل جدًا تنفيذه في لغة C.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top