سؤال

لقد استخدمت عددًا من الأنظمة المختلفة المستندة إلى Nix في السنوات ، ويبدو أن كل نكهة Bash التي أستخدمها لديها خوارزمية مختلفة لتحديد البرامج النصية التي سيتم تشغيلها. لأغراض المهام مثل إعداد متغيرات البيئة والمستعيرات وطباعة رسائل بدء التشغيل (مثل Motds) ، أي نص بدء التشغيل هو المكان المناسب للقيام بذلك؟

ما الفرق بين وضع الأشياء في .bashrc, .bash_profile, ، و .environment؟ لقد رأيت أيضًا ملفات أخرى مثل .login, .bash_login, ، و .profile; ؛ هل هذه ذات صلة من أي وقت مضى؟ ما هي الاختلافات التي يتم تشغيلها عند تسجيل الدخول جسديًا ، وتسجيل الدخول عن بُعد عبر SSH ، وفتح نافذة طرفية جديدة؟ هل هناك أي فروق ذات دلالة إحصائية عبر المنصات (بما في ذلك Mac OS X (و terminal.app) و Cygwin Bash)؟

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

المحلول

الفرق الرئيسي في ملفات shell config هو أن بعضها يتم قراءته فقط بواسطة قذائف "تسجيل الدخول" (على سبيل المثال. عند تسجيل الدخول من مضيف آخر ، أو تسجيل الدخول إلى وحدة التحكم النصية لجهاز UNIX محلي). هؤلاء هم الذين يسمى ، على سبيل المثال ، .login أو .profile أو .zlogin (اعتمادًا على القذيفة التي تستخدمها).

بعد ذلك ، لديك ملفات تكوين يتم قراءتها بواسطة قذائف "Interactive" (كما في ، تلك المتصلة بمحطة (أو محطة زائفة في حالة ، على سبيل المثال ، محاكي طرفي يعمل تحت نظام الرياح). هذه هي الأسماء مثل .bashrc, .tcshrc, .zshrc, ، إلخ.

bash يعقد هذا في ذلك .bashrc هو اقرأ فقط بواسطة قذيفة كلاهما تفاعلي و غير مزدوج, ، لذلك ستجد معظم الناس يخبرونهم .bash_profile لقراءة أيضا .bashrc مع شيء مثل

[[ -r ~/.bashrc ]] && . ~/.bashrc

قذائف أخرى تتصرف بشكل مختلف - على سبيل المثال مع zsh, .zshrc تتم قراءة دائمًا لقذيفة تفاعلية ، سواء كانت تسجيل دخول أو لا.

تشرح الصفحة اليدوية لـ Bash الظروف التي يتم بموجبها قراءة كل ملف. نعم ، السلوك يتسق بشكل عام بين الآلات.

.profile هو ببساطة اسم ملف البرنامج النصي لتسجيل الدخول المستخدم في الأصل بواسطة /bin/sh. bash, كونك متوافقًا مع الوراء بشكل عام /bin/sh, ، سوف يقرأ .profile إذا كان واحد موجود.

نصائح أخرى

هذا بسيط. تم شرحه في man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

قذائف تسجيل الدخول هي تلك التي تتم قراءة واحدة تقوم بتسجيلائها (لذلك ، لا يتم تنفيذها عند بدء تشغيل Xterm ، على سبيل المثال). هناك طرق أخرى لتسجيل الدخول. على سبيل المثال باستخدام مدير عرض X. هذه لديها طرق أخرى لقراءة وتصدير متغيرات البيئة في وقت تسجيل الدخول.

اقرأ أيضا INVOCATION الفصل في الدليل. انها تقول "تصف الفقرات التالية كيف تنفذ باش ملفات بدء التشغيل.", ، أعتقد أن هذا بقعة :) إنه يفسر ما هي قذيفة "تفاعلية" أيضًا.

باش لا يعرف عن .environment. أظن أن هذا ملف لتوزيعك ، لتعيين متغيرات البيئة بشكل مستقل عن القشرة التي تقودها.

كلاسيكيا ، ~/.profile يستخدم بواسطة بورن شل ، وربما يدعمه باش كتدبير قديم. ثانية، ~/.login و ~/.cshrc تم استخدامه بواسطة C Shell - لست متأكدًا من أن Bash يستخدمها على الإطلاق.

ال ~/.bash_profile سوف تستخدم مرة واحدة ، في تسجيل الدخول. ال ~/.bashrc تتم قراءة البرنامج النصي في كل مرة يتم فيها بدء قذيفة. هذا مماثل /.cshrc ل C Shell.

نتيجة واحدة هي أن الأشياء في ~/.bashrc يجب أن تكون خفيفة الوزن (الحد الأدنى) قدر الإمكان لتقليل النفقات العامة عند بدء قذيفة غير مدونة.

أعتقد ~/.environment الملف هو ملف توافق لـ Korn Shell.

لقد وجدت معلومات حول .bashrc و .bash_profile هنا ليتم تلخيصه:

يتم تنفيذ .bash_profile عند تسجيل الدخول. قد يكون هناك الأشياء التي تضعها في طريقك ومتغيرات البيئة المهمة الأخرى.

. Bashrc يستخدم لقذائف غير تسجيل الدخول. لست متأكدًا مما يعنيه ذلك. أعلم أن Redhat ينفذها في كل مرة تبدأ فيها قذيفة أخرى (SU لهذا المستخدم أو ببساطة الاتصال Bash مرة أخرى) قد ترغب في وضع الأسماء المستعارة هناك ولكن مرة أخرى لست متأكدًا مما يعنيه ذلك. أنا ببساطة أتجاهل ذلك بنفسي.

profile هو ما يعادل .bash_profile للجذر. أعتقد أن الاسم قد تم تغييره للسماح للقذائف الأخرى (CSH ، SH ، TCSH) باستخدامه أيضًا. (لا تحتاج إلى واحد كمستخدم)

هناك أيضا .bash_logout ينفذ في ، نعم تخمين جيد ... تسجيل الدخول. قد ترغب في إيقاف Deamons أو حتى إجراء القليل من التدبير المنزلي. يمكنك أيضًا إضافة "مسح" هناك إذا كنت ترغب في مسح الشاشة عند تسجيل الخروج.

هناك أيضًا متابعة كاملة لكل من ملفات التكوينات هنا

من المحتمل أن تكون هذه توزيعة معتدلًا ، ولا تختار جميع التوزيعات الحصول على كل تكوين معهم والبعض الآخر لديه المزيد. ولكن عندما يكون لديهم نفس الاسم ، فإنهم يتضمنون نفس المحتوى.

وفق جوش ستايجر, ، يعمل Mac OS X's Terminal.App في الواقع على قشرة تسجيل الدخول بدلاً من قذيفة غير لوغين افتراضيًا لكل نافذة طرفية جديدة ، واتصل .bash_profile بدلاً من .bashrc.

وهو يوصي:

في معظم الأوقات ، لا ترغب في الحفاظ على ملفين منفصلين للتكوين لتسجيل الدخول وغير اللوجينات-عند تعيين مسار ، تريد أن تنطبق على كليهما. يمكنك إصلاح هذا عن طريق تحديد مصادر .bashrc من ملف .bash_profile الخاص بك ، ثم وضع المسار والإعدادات الشائعة في .bashrc.

للقيام بذلك ، أضف الأسطر التالية إلى .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

الآن عندما تقوم بتسجيل الدخول إلى جهازك من وحدة تحكم. سيتم استدعاء bashrc.

مكان جيد للنظر إليه هو صفحة Man of Bash. هنانسخة عبر الإنترنت. ابحث عن قسم "الاحتجاج".

لقد استخدمت توزيعات Debian-Family التي يبدو أنها تنفذ .profile, ، لكن لا .bash_profile، في حين تنفذ مشتقات RHEL .bash_profile قبل .profile.

يبدو أن الفوضى عندما تضطر إلى إعداد متغيرات البيئة للعمل في أي نظام التشغيل Linux.

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