bash - تشغيل البرنامج النصي عند تسجيل الدخول إلى mac





shell login terminal osx-snow-leopard (4)


  1. قم login.sh البرنامج النصي shell الخاص بك كملف login.sh في المجلد $ HOME الخاص بك.

  2. لصق البرنامج النصي التالي من سطر واحد في Script Editor:

    تنفيذ نصوص shell "$ HOME / login.sh"

  3. ثم احفظه كتطبيق.

  4. وأخيرًا ، أضف التطبيق إلى عناصر تسجيل الدخول الخاصة بك.

إذا كنت ترغب في جعل إخراج البرنامج النصي مرئيًا ، فيمكنك تبديل الخطوة 2 لهذا:

tell application "Terminal"
  activate
  do script "$HOME/login.sh"
end tell

إذا كانت هناك حاجة لأوامر متعددة ، فيمكن استخدام شيء من هذا القبيل:

tell application "Terminal"
  activate
  do script "cd $HOME"
  do script "./login.sh" in window 1
end tell

أنا أتساءل إذا كان أي شخص قادر على مساعدتي في الحصول على ملف .sh لتشغيل عند تسجيل الدخول إلى حسابي على جهاز الكمبيوتر الخاص بي. أقوم بتشغيل Mac OS X 10.6.7.

لدي ملف "Example.sh" الذي أريد تشغيله عند تسجيل الدخول إلى الكمبيوتر. ليس لدي مشكلة في تشغيله عندما أقوم بتسجيل الدخول بالفعل ، ولكن أريد أن يتم تشغيله تلقائيًا.

يقول الناس لإضافته إلى ملف shell login ، لكن لا أعرف أين يوجد ذلك. بعض المساعدة من فضلك.




تستطيع:

  • بدء Automator.app
  • اختر "التطبيق"
  • انقر فوق "إظهار المكتبة" في شريط الأدوات (إذا كانت مخفية)
  • إضافة "تشغيل برنامج نصي shell" (من الإجراءات / الأدوات المساعدة)
  • انسخ البرنامج النصي والصقه في النافذة
  • قم بتجريبه
  • حفظ في مكان ما ، على سبيل المثال ، يمكنك إنشاء مجلد "Applications" في HOME (ستحصل على your_name.app)

    تحديث : للحصول على أحدث نظام macOS ، قم بتسمية الملف الخاص بك your_name.command بدلاً من your_name.app

  • انتقل إلى تفضيلات النظام -> الحسابات -> عناصر تسجيل الدخول

  • أضف هذا التطبيق
  • اختبار وفعله؛)

تصحيح:

لقد حصلت مؤخرًا على شارة "إجابة جيدة" لهذه الإجابة. في حين أن حلّي بسيط وعامل ، فإن الطريقة الأنظف لتشغيل أي برنامج أو نص برمجي في وقت تسجيل الدخول موضحة في الإجابة بـ @ trisweb ، إلا إذا كنت تريد التفاعل .

باستخدام حل تلقائي ، يمكنك القيام بأشياء مثل التالي:

لذلك ، طلب تشغيل برنامج نصي أو إنهاء التطبيق ، وطلب كلمات المرور ، وتشغيل مهام سير العمل الأخرى في وقت تسجيل الدخول ، تشغيل التطبيقات بشكل مشروط في وقت تسجيل الدخول وهلم جرا ...




tl؛ dr: استخدم launchd ومدير العمليات الأصلي في OSX ، launchd .

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

  1. قم .plist ملف .plist وفقًا للإرشادات الموجودة في مستندات Apple Dev هنا أو لمزيد من التفاصيل أدناه.
  2. ضع في ~/Library/LaunchAgents
  3. تسجيل الدخول (أو التشغيل يدويًا عبر launchctl load [filename.plist] )

لمزيد من المعلومات حول launchd ، فإن مقالة wikipedia جيدة للغاية وتصف النظام ومميزاته على الأنظمة القديمة الأخرى.

إليك ملف plist محدد لتشغيل برنامج نصي عند تسجيل الدخول .

تم التحديث في 2017/09/25 لـ OSX El Capitan وأحدثها (اعتماد إلى José Messias Jr ):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array><string>/path/to/executable/script.sh</string></array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

استبدل بعد مفتاح البرنامج بالأمر المطلوب.

حفظ كـ ~/Library/LaunchAgents/com.user.loginscript.plist

تشغيل launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist وتسجيل الخروج / للاختبار (أو للاختبار مباشرة ، قم بتشغيل launchctl start com.user.loginscript )

/var/log/system.log لرسائل الخطأ.

المفتاح هو أن إدخال launchd خاص بالمستخدم ، بحيث يتم تشغيله عند تسجيل الدخول للمستخدم المحدد. يتم تشغيل /Library/LaunchDaemons إطلاق نظام معين (وضعت في /Library/LaunchDaemons ) على التمهيد.

إذا كنت تريد تشغيل نص برمجي عند تسجيل الدخول لجميع المستخدمين ، فأعتقد أن LoginHook هو خيارك الوحيد ، وربما يكون هذا هو سبب وجوده.




هناك حلول رائعة ، ولكن في النهاية يفشل كل برنامج نصي إذا لم تكن في الدليل الصحيح. حتى الكود هكذا:

if [ -d "$LINK_OR_DIR" ]; then 
if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here
    rm "$LINK_OR_DIR"
else
    # It's a directory!
    # Directory command goes here
    rmdir "$LINK_OR_DIR"
fi
fi

ستنفذ بنجاح فقط إذا كنت في لحظة التنفيذ في دليل يحتوي على دليل فرعي تتحقق منه.

أفهم السؤال الأولي مثل هذا: للتحقق من وجود دليل بغض النظر عن موقع المستخدم في نظام الملفات. لذا فإن استخدام الأمر 'find' قد يؤدي إلى الحيلة:

dir=" "
echo "Input directory name to search for:"
read dir
find $HOME -name $dir -type d

هذا الحل جيد لأنه يسمح باستخدام أحرف البدل ، وهي ميزة مفيدة عند البحث عن الملفات / الدلائل. المشكلة الوحيدة هي أنه في حالة عدم وجود الدليل الذي تم البحث فيه ، فإن أمر 'find' لن يطبع أي شيء إلى stdout (ليس حلاً رائعاً لذوقي) ، ومع ذلك سيكون هناك خروج صفر. ربما شخص ما يمكن أن تحسن على هذا.





bash shell login terminal osx-snow-leopard