it-swarm.asia

كيف يمكنني تشغيل تطبيق باستخدام وسيطات سطر الأوامر في Mac OS

هل هناك أي طريقة سهلة لإلحاق وسيطات سطر الأوامر بالتطبيق على جهاز Mac؟ على سبيل المثال ، لتشغيل Opera في وضع kiosk أو لاستخدام ملف تعريف مختلف في Firefox ، يمكنني الكتابة

$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote

في نظام التشغيل Windows ، يمكنني إلحاق الوسائط بخصائص الاختصار ، لكن بما أن أجهزة Mac لا تستخدم الاختصار في حد ذاته وتقوم بتشغيل التطبيقات مباشرة ، فإن هذا غير ممكن.

لقد وجدت أن تشغيل التطبيقات من خلال bash أو Applescript يعمل جزئيًا:

# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote

# Applescript    
do Shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"

يمكنني جعل هذه الملفات قابلة للتنفيذ وتعيين رمز وكل شيء يعمل بشكل رائع باستثناء أنه عندما أقوم بتشغيل أي من هذه البرامج الزائفة ، إما أن تظل نافذة طرفية أو أيقونة Applescript مفتوحة طالما أن التطبيق مفتوح. من المفترض أن يؤدي استخدام الأمر Applescript open إلى تجنب هذا الأمر ، لكن بما أنني لا أستخدم التطبيق لأنه تم حزمه (فقط /Applications/Firefox) ، فهو لا يعمل.

لذلك ، هل هناك طريقة أفضل لتشغيل التطبيقات باستخدام وسيطات سطر الأوامر؟ إذا لم يكن كذلك ، هل هناك طريقة لمنع جلسة عمل محطة طرفية دائمة أو رمز Applescript من البقاء مفتوحًا أثناء فتح التطبيق؟

تحرير

وفقًا لـ صفحة Mozilla Wiki ، من الأفضل استخدام برنامج نصي لتشغيل التطبيق باستخدام الوسائط. تؤدي إضافة رمز & إلى نهاية البرنامج النصي إلى قتل الإطار الطرفي المستمر. الانزعاج الوحيد الآن هو أنه يفتح نافذة طرفية ميتة مُسجَّلة (وهي أفضل من النافذة الثابتة ، ولكن لا يزال ...)

#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
59
Andrew

إليك أفضل حل لي: إنشاء Applescript باستخدام:

do Shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"

و احفظه كتطبيق .

يمكنك وضع أي تطبيق مع أي حجج في الجزء الأول. الجزء الذي يلي & يحتاج إلى قتل كل ما سمّته بالبرنامج النصي + .app. سترى تطبيق البرنامج النصي وميضًا في قفص الاتهام ، ولكنه سيختفي بعد ذلك.

ملاحظة: لن يعمل البرنامج النصي بشكل صحيح عند التشغيل من Script Editor ، فقط عند تشغيله من تطبيق البرنامج النصي الذي قمت بإنشائه.

16
MJeffryes

بدءاً من OS X 10.6.2 ، يمكن للأمر open تمرير الوسائط إلى التطبيق الذي يفتحه عن طريق علامة -args. يبدو AppleScript لاستخدامه كما يلي:

do Shell script "open -a /Applications/Firefox.app --args -P default -no-remote"

يجب أن يوفر لك كل السلوك الذي تريده.

25
Bob

افتح Automator وقم بإنشاء تطبيق باستخدام تشغيل Shell Script عمل:

 /Applications/Firefox.app/Contents/MacOS/firefox-bin -here-some-args &

سيقوم هذا التطبيق بتشغيل Firefox وإنهاءه على الفور ، مما يؤدي إلى تشغيل Firefox فقط.


بدلاً من ذلك ، قم بإنشاء تطبيق باستخدام AppleScript Editor برمز AppleScript التالي:

do Shell script "open -a '/Users/danielbeck/Applications/Firefox.app' --args -ProfileManager"

كلاهما يعمل بشكل جيد ولا يحتفظان بـ Terminal أو تطبيق نصي يعمل لأكثر من ثانية أو نحو ذلك. باستخدام Automator ، يمكنك إنشاء خدمة إذا اخترت ذلك.

11
Daniel Beck

هذه مناقشة قديمة ، لكن لا تزال تظهر في عمليات بحث Google ، لذلك اعتقدت أنني سأضيف بعضًا من ¢.

من الأفضل استخدام "معرف حزمة" بدلاً من المسار المطلق إلى الملف القابل للتنفيذ:

open -b com.google.Chrome --args --profile-directory="Profile 1"

أو في Apple Script:

do Shell script "open -b com.google.Chrome --args --profile-directory='Profile 1'"

ما لم أحسبه بعد هو كيفية فتح مثيل/نافذة جديدة بملف تعريف مختلف بمجرد فتح الملف الأول بالفعل. (إذا قمت بتشغيل AppleScript أعلاه ، ثم آخر باستخدام "Profile 2" ، فسيظل Chrome يفتح نافذة أخرى باسم "Profile 1"). :(

8
user1722483

ليس من الضروري (كما اقترحت بعض الإجابات الأخرى) استخدام killall (أو ما شابه) لقتل عملية تطبيق AppleScript الأصل ("التطبيق الصغير") في هذا السيناريو. يمكن أن يكون لها تأثيرات جانبية غير مألوفة إذا كان الاسم/النمط المعطى لـ killall يتطابق مع أكثر من مجرد عملية التطبيق الصغير الأصل (على سبيل المثال ، تطبيقات أخرى تعمل بشكل متزامن مع تطبيقات AppleScript (في حالة استخدام "applet" كنمط )).

قد يكون شيء مثل kill $PPID أكثر منطقية ، لكننا قد لا نريد أن نفترض أن التطبيق الصغير لتطبيق AppleScript هو دائمًا الوالد المباشر لـ Shell الذي بدأ بواسطة فعل Shell script . لحسن الحظ ، هناك طريقة معقولة تماما للقيام بما تحتاجه.

لكل TN2065 (ضمن "أريد أن أبدأ عملية خادم خلفية ؛ كيف أجعل برنامج شل لا ينتظر حتى يكمل الأمر؟") ، الطريقة الصحيحة هي إعادة توجيه stdout و stderr وجعل Shell تشغيل البرنامج في الخلفية.

استخدم Script Editor لحفظ البرنامج التالي كتطبيق AppleScript:

do Shell script ¬
    "/Applications/Firefox.app/Contents/MacOS/firefox-bin \\
        -P default -no-remote \\
        >/dev/null 2>&1 &"

(تمت إضافة فواصل الأسطر الوظيفية لإبقائها "ضيقة" ؛ احذف ¬ و \\ ووضعها كلها في سطر طويل واحد إذا أردت)

سيتم تشغيله لفترة كافية لبدء Firefox وسيتم الخروج بشكل نظيف بينما يستمر Firefox في التشغيل.

إعادة التوجيه مطلوبة لأنه لا يقوم فقط بالقيام ببرنامج Shell النصي في انتظار خروج الطفل المباشر (Shell) ، ولكنه ينتظر أيضًا (في جميع الحالات) النهايات القابلة للكتابة في الأنابيب يخلق ل stdout شل و stderr ليتم إغلاقه. يتم توارث stdout و stderr ( Shell من أنابيب Shell ) من خلال البرامج التي يتم تشغيلها دون إعادة التوجيه (حتى تلك التي يتم تشغيلها في الخلفية باستخدام &) ؛ يضمن إعادة التوجيه أن تكون شل هي الأخيرة التي تحمل نهايات الأنابيب القابلة للكتابة. وبالتالي ، سيعود البرنامج النصي Shell مباشرةً بعد خروج Shell ، مما يسمح لتطبيق AppleScript نفسه بالخروج (بما أن قيام Shell بالبرنامج النصي هو التعبير الأخير في برنامج AppleScript).

الإجابات الأخرى التي تستخدم open بداخل تعمل برنامج شل النصي لأن open (بالفعل LaunchServices) تقوم بما يعادلها عمل خلفية البرنامج الناتج وإرسال stdout و stderr في مكان آخر.

7
Chris Johnsen

ابليسكريبت

do Shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --incognito & killall applet"

نقطتين هناك.

  1. يتم الهروب من الفضاء بخط مائل عكسي يتم هربه بخط مائل عكسي مرة أخرى
  2. التطبيق الصغير killall يمكن أن يسبب مشاكل ، لأنه قد يكون هناك تطبيقات صغيرة أخرى تعمل
  3. احفظه كبرنامج

ومع ذلك يعمل بشكل جيد على 10.6.5

4
anonymous

يجب أن يتيح لك التالي تحديد وسيطات سطر الأوامر لـ .app نفسه:

انقر بزر الماوس الأيمن فوق حزمة .app ، وحدد "إظهار محتويات الحزمة" ، وانتقل إلى Info.plist ، وانقر نقرًا مزدوجًا عليه ، وابحث عن مفتاح Args ، وحرره.

ليس لدي جهاز OS X سهل الاستخدام في الوقت الحالي ، لذلك لا يمكنني التحقق مما إذا كان يمكنك أيضًا القيام بذلك باسم مستعار (إذا كنت تريد الاحتفاظ بالوسيطة الأصلية .app خالية من الوسيطة ، وما إلى ذلك).

2
Dav

لف التطبيق الخاص بك داخل مشغل AppleScript.

هنا هي الخطوات.

  1. أنشئ AppleScript بالمحتوى التالي ، واحفظه كتطبيق (في هذا المثال أطلق عليه اسم "Firefox 3 launcher.app").

    set pathToApp to (POSIX path of (path to me)) & "Firefox 3.app"
    do Shell script "open -a \"" & pathToApp & "\" --args -P default -no-remote"
    
  2. حصلت على هذا التطبيق في Finder ، وانقر فوقه بزر الماوس الأيمن ، وأظهر محتويات الحزمة.

  3. ضع طلبك في جذر محتويات الحزمة. (في هذا المثال سيكون "Firefox 3.app")

    النتيجة: /Applications/Firefox 3 launcher.app/Firefox 3.app

  4. يمكنك الآن فتح مشغل التطبيق الخاص بك.

ملاحظات:

  • يجب أن تعمل التحديثات التلقائية للتطبيق الملفوف في معظم الحالات.
  • يجب أن يكون بالإمكان إعادة توجيه أي سحب وإسقاط إلى المشغل تلقائيًا إلى التطبيق المُلف (مع مزيد من البرمجة النصية).
  • يتم إنهاء المشغل تلقائيًا بعد بدء تشغيل التطبيق المُلف.
  • من مميزات هذه الطريقة وجود مخاطر قليلة في فتح التطبيق المغلف مباشرة.
2
jlgrall

يحتوي الأمر open على وسيطة --args اختيارية سيتم تمرير هذه القيمة إلى التطبيق المفتوح كوسائط. فمثلا:

open /Applications/TextEdit.app --args example.txt
0
ecnepsnai