ما الفرق بين .bashrc ، .bash_profile ، و.
-
03-07-2019 - |
سؤال
لقد استخدمت عددًا من الأنظمة المختلفة المستندة إلى 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.