الفرق بين المراجعتين لصفحة: «Bash/shell initialization files»

من موسوعة حسوب
إضافة 0.1 بدون تنسيق
إدخال للمحتوى وتنسيقه
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:ملفات تهيئة الصدفة}}</noinclude>
<noinclude>{{DISPLAYTITLE:ملفات تهيئة الصدفة}}</noinclude>
ملفات الإعدادات على مستوى النظام System-wide Configuration files


etc/profile/
== ملفات الإعدادات على مستوى النظام System-wide Configuration files ==


تقرأ Bash التعليمات الموجودة في etc/profile/ إن استدعيْت بشكل تفاعلي عبر خيار login-- أو إن استدعيْت كـ sh ، تضبط تلك التعليمات عادة متغيرات PATH - USER - MAIL - HOSTNAME - HISTSIZE ، وهي متغيرات تابعة للصدفة.
=== etc/profile/ ===
تقرأ Bash التعليمات الموجودة في <code>etc/profile/</code> إن استدعيْت بشكل تفاعلي عبر خيار <code>login--</code> أو إن استدعيْت كـ <code>sh</code> ، تضبط تلك التعليمات عادة متغيرات <code>PATH - USER - MAIL - HOSTNAME - HISTSIZE</code> ، وهي متغيرات تابعة للصدفة.


كذلك تُضبط قيمة unmask في etc/profile/ على بعض الأنظمة، أما في بعضها الآخر فإن هذا الملف يحتوي على موجّهات (pointers) لملفات الإعدادات الأخرى مثل:
كذلك تُضبط قيمة <code>umask</code> في <code>etc/profile/</code> على بعض الأنظمة، أما في بعضها الآخر فإن هذا الملف يحتوي على موجّهات (pointers) لملفات الإعدادات الأخرى مثل:
* ملف <code>etc/inputrc/</code> ، وهو ملف تهيئة على مستوى النظام لأمر <code>readline</code>، حيث يمكنك تهيئة أسلوب الجرس (bell style) لسطر الأوامر.
* مجلد <code>etc/profile.d/</code> ، وهو يحتوي الملفات التي تضبط سلوك برامج محددة على مستوى النظام.
يجب أن تكون كل الإعدادات التي تريد تطبيقها على جميع المستخدمين في النظام لديك موجودة في ذلك الملف -<code>etc/profile/</code>-، وقد يكون شكله مشابهًا لما يلي:<syntaxhighlight lang="bash">
# /etc/profile


ملف etc/inputrc/ ، وهو ملف تهيئة على مستوى النظام لأمر readline، حيث يمكنك تهيئة أسلوب الجرس (bell style) لسطر الأوامر.
# System wide environment and startup programs, for login setup
 
مجلد etc/profile.d/ ، وهو يحتوي الملفات التي تضبط سلوك برامج محددة على مستوى النظام.
 
يجب أن تكون كل الإعدادات التي تريد تطبيقها على جميع المستخدمين في النظام لديك موجودة في ذلك الملف -etc/profile/-، وقد يكون شكله مشابهًا لما يلي:
 
<nowiki>#</nowiki> /etc/profile
 
<nowiki>#</nowiki> System wide environment and startup programs, for login setup


PATH=$PATH:/usr/X11R6/bin
PATH=$PATH:/usr/X11R6/bin


<nowiki>#</nowiki> No core files by default
# No core files by default
 
ulimit -S -c 0 > /dev/null 2>&1
ulimit -S -c 0 > /dev/null 2>&1


USER="`id -un`"
USER="`id -un`"
LOGNAME=$USER
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
MAIL="/var/spool/mail/$USER"


HOSTNAME=`/bin/hostname`
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTSIZE=1000


<nowiki>#</nowiki> Keyboard, bell, display style: the readline config file:
# Keyboard, bell, display style: the readline config file:
 
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
 
    INPUTRC=/etc/inputrc
    INPUTRC=/etc/inputrc
 
fi
fi


سطر 46: سطر 35:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1


<nowiki>#</nowiki> Source initialization files for specific programs (ls, vim, less, ...)
# Source initialization files for specific programs (ls, vim, less, ...)
for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        . $i
    fi
done
 
# Settings for program initialization
source /etc/java.conf
export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins"


for i in /etc/profile.d/*.sh ; do
PAGER="/usr/bin/less"
 
unset i
</syntaxhighlight>ويضبط ملف التهيئة ذاك بعض متغيرات الصدفة الأساسية إضافة إلى بعض المتغيرات التي يطلبها أي مستخدم يشغّل جافا أو أي تطبيقات جافا في متصفحه. انظر [[Bash/variables|المتغيرات في Bash]].
 
يحتوي مصدر Bash على نماذج لملفات <code>profile</code> من أجل الاستخدام العام أو الفردي، وتمر تلك الملفات -والملف في المثال بالأعلى- على عدة تغييرات قبل استخدامها في بيئتك.
 
=== etc/bashrc/ ===
ربما يكون من الأفضل أن تضع الملفات الخاصة بتهيئة Bash في هذا الملف إن كنت تعمل على أنظمة بها أنواعًا مختلفة من الصدفات، ذلك أن الصدفات الأخرى -صدفة بورن مثلًا- تقرأ ملف <code>etc/profile/</code>.
 
ويمكن تلافي حدوث الأخطاء التي تولّدها الصدفات التي لا تفهم البنية اللغوية (syntax) لصدفة bash بفصل ملفات الإعدادات (configuration files) للأنواع المختلفة من الصدفات، ويشير ملف <code>bashrc./~</code> الخاص بالمستخدم في تلك الحالات إلى <code>etc/bashrc/</code> من أجل تضمينه في عملية تهيئة الصدفة (shell initialization) عند تسجيل الدخول.
 
قد تجد أن ملف <code>etc/profile/</code> الموجود في نظامك لا يحتوي إلا على إعدادات بيئة الصدفة وإعدادات بدء تشغيل البرنامج، بينما يحتوي <code>etc/bashrc/</code> على تعريفات على مستوى النظام (system-wide definitions) لدوال الصدفة وأوامرها البديلة. أيضًا قد يشار إلى ملف <code>etc/bashrc/</code> داخل ملف <code>etc/profile/</code> أو في ملفات تهيئة الصدفة الخاصة بالمستخدم.
 
يحتوي المصدر على نماذج لملفات <code>bashrc</code>، كما ستجد نسخة منه في <code>usr/share/doc/bash-2.05b/startup-files/</code> . إليك جزءًا مما يكون في ملف <code>bashrc</code> الذي يأتي مع توثيق Bash:<syntaxhighlight lang="bash">
alias ll='ls -l'
alias dir='ls -ba'
alias c='clear'
alias ls='ls --color'


    if [ -r "$i" ]; then
alias mroe='more'
alias pdw='pwd'
alias sl='ls --color'


        . $i
pskill()
{
        local pid


    fi
        pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }')
        echo -n "killing $1 (process $pid)..."
        kill -9 $pid
        echo "slaughtered."
}
</syntaxhighlight>وهو يحتوي على أوامر بديلة (aliases) مفيدة إضافة إلى الأوامر البديلة العامة، إذ أنها تضمن تنفيذ الأمر الذي تدخله حتى لو أخطأت في تهجئته، انظر [[Bash/aliases|الأوامر البديلة]]. يحتوي هذا الملف أيضًا على دالة <code>pskill</code>، انظر [[Bash/functions|الدوال في Bash]] لمزيد من الشرح عن الدوال.


done
== ملفات إعدادات المستخدم ==
<blockquote>'''لا أجد تلك الملفات على حاسوبي!؟'''</blockquote><blockquote>قد لا تجد تلك الملفات في مجلد المنزل (home) لديك، فأنشئها بنفسك إن كانت غير موجودة.</blockquote>


<nowiki>#</nowiki> Settings for program initialization
=== bash_profile./~ ===
يفضّل استخدام هذا الملف في حالة إعداد البيئات لكل مستخدم على حدة، وللمستخدمين هنا أن يضيفوا خيارات إضافية أو يغيروا الإعدادات الافتراضية:<syntaxhighlight lang="bash">
hsoub~> cat .bash_profile
#################################################################
#                                                              #
#  .bash_profile file                                          #
#                                                              #
#  Executed from the bash shell when you log in.              #
#                                                              #
#################################################################


source /etc/java.conf
source ~/.bashrc
source ~/.bash_login
case "$OS" in
  IRIX)
    stty sane dec
    stty erase
    ;;
#  SunOS)
#    stty erase
#    ;;
  *)
    stty sane
    ;;
esac
</syntaxhighlight>يضبط هذا المستخدم -صاحب الإعدادات أعلاه- زر backspace لتسجيل الدخول على أنظمة تشغيل مختلفة، وإضافة إلى ذلك فإن ملفات <code>bashrc.</code> و<code>bash_login.</code> الخاصة بالمستخدم قد قُرِأت.


export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins"
=== bash_login./~ ===
أما هذا الملف فيحتوي إعدادات محددة لا تُنفَّذ عادة إلا حين تسجل الدخول إلى النظام، وسنستخدمها في المثال التالي لضبط قيمة <code>umask</code> وعرض قائمة من المستخدمين المتصلين حال تسجيل الدخول، كما سيظهر لهذا المستخدم تقويمًا بالشهر الحالي:<syntaxhighlight lang="bash">
#######################################################################
#                                                                    #
#  Bash_login file                                                  #
#                                                                    #
#  commands to perform from the bash shell at login time            #
#  (sourced from .bash_profile)                                      #
#                                                                    #
#######################################################################
#  file protection
umask 002      # all to me, read to group and others
#  miscellaneous
w
cal `date +"%m"` `date +"%Y"`
</syntaxhighlight>وسيُقرأ هذا الملف في غياب <code>bash_profile./~</code> .


PAGER="/usr/bin/less"
=== profile./~ ===
<span> يُقرأ ملف <code>profile./~</code> في غياب ملفي <code>bash_profile./~</code> و <code>bash_login./~</code> ، وقد يحتوي هذا الملف على نفس الإعدادات التي -في تلك الحالة- تستطيع الصدفات الأخرى الوصول إليها. لاحظ أن تلك الصدفات قد لا تفهم البنية اللغوية لصدفة bash .</span>


unset i
=== bashrc./~ ===
من المعتاد الآن أن ترى صدفة non-login  بسبب تسجيل المستخدم للدخول من الواجهات الرسومية، ولا يُدخل المستخدم بياناته في تلك الحالة -اسم المستخدم وكلمة المرور- فلا تتم عملية المصادقة، وعندها تبحث Bash عن ملف <code>bashrc./~</code>، لذا فإن ذلك الملف يشار إليه في الملفات المقروءة عند تسجيل الدخول مما يعني أنك لا تحتاج إلى إدخال نفس الإعدادات في عدة ملفات.


ويضبط ملف التهيئة ذاك بعض متغيرات الصدفة الأساسية إضافة إلى بعض المتغيرات التي يطلبها أي مستخدم يشغّل جافا أو أي تطبيقات جافا في متصفحه. انظر المتغيرات في Bash.
وفي المثال التالي لملف <code>bashrc.</code> لمستخدم ما، تجد أنه قد حُدِّدت بعض الأوامر البديلة وضُبطَت متغيرات لبرامج محددة، بعد قراءة ملف <code>etc/bashrc/</code> :<syntaxhighlight lang="bash">
hsoub ~> cat .bashrc
# /home/franky/.bashrc


يحتوي مصدر Bash على نماذج لملفات profile من أجل الاستخدام العام أو الفردي، وتمر تلك الملفات -والملف في المثال بالأعلى- على عدة تغييرات قبل استخدامها في بيئتك.
# Source global definitions
if [ -f /etc/bashrc ]; then
      . /etc/bashrc


etc/bashrc/
fi


ربما يكون من الأفضل أن تضع الملفات الخاصة بتهيئة Bash في هذا الملف إن كنت تعمل على أنظمة بها أنواعًا مختلفة من الصدفات، ذلك أن الصدفات الأخرى -صدفة بورن مثلًا- تقرأ ملف etc/profile/.
# shell options


ويمكن تلافي حدوث الأخطاء التي تولّدها الصدفات التي لا تفهم البنية اللغوية (syntax) لصدفة bash بفصل ملفات الإعدادات (configuration files) للأنواع المختلفة من الصدفات، ويشير ملف bashrc./~ الخاص بالمستخدم في تلك الحالات إلى etc/bashrc/ من أجل تضمينه في عملية تهيئة الصدفة عند تسجيل الدخول.
set -o noclobber


قد تجد أن ملف etc/profile/ الموجود في نظامك لا يحتوي إلا على إعدادات بيئة الصدفة وإعدادات بدء تشغيل البرنامج، بينما يحتوي etc/bashrc/ على تعريفات على مستوى النظام (system-wide definitions) لدوال الصدفة وأوامرها البديلة. أيضًا قد يشار إلى ملف etc/bashrc/ داخل ملف etc/profile/ أو في ملفات تهيئة الصدفة الخاصة بالمستخدم.
# my shell variables


يحتوي المصدر على نماذج لملفات bashrc، كما ستجد نسخة منه في usr/share/doc/bash-2.05b/startup-files/ . إليك جزءًا مما يكون في ملف bashrc الذي يأتي مع توثيق Bash:
export PS1="\[\033[1;44m\]\u \w\[\033[0m\] "
export PATH="$PATH:~/bin:~/scripts"


alias ll='ls -l'
# my aliases


alias dir='ls -ba'
alias cdrecord='cdrecord -dev 0,0,0 -speed=8'
alias ss='ssh octarine'
alias ll='ls -la'


alias c='clear'
# mozilla fix


alias ls='ls --color'
MOZILLA_FIVE_HOME=/usr/lib/mozilla
LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins
MOZ_DIST_BIN=/usr/lib/mozilla
MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin
export MOZILLA_FIVE_HOME LD_LIBRARY_PATH MOZ_DIST_BIN MOZ_PROGRAM


alias mroe='more'
# font fix
alias xt='xterm -bg black -fg white &'


alias pdw='pwd'
# BitchX settings
export IRCNAME="frnk"


alias sl='ls --color'
# THE END
hsoub ~>
</syntaxhighlight>ستجد أمثلة أكثر في حزمة Bash، وتذكر أن نماذج الملفات الموجودة قد تحتاج إلى تعديلات قبل استخدامها من أجل أن تعمل في بيئتك.


pskill()
=== bash_logout./~ ===
يحتوي هذا الملف على تعليمات محددة لإجراء تسجيل الخروج، وفي المثال التالي فإنها تعليمة واحدة "<code>clear</code>" لتترك النافذة خالية بعد إغلاقها، ومثل ذلك الأمر مفيد في الاتصالات عن بعد (remote connections):<syntaxhighlight lang="bash">
hsoub ~> cat .bash_logout
#######################################################################
#                                                                    #
#  Bash_logout file                                                  #
#                                                                    #
#  commands to perform from the bash shell at logout time            #
#                                                                    #
#######################################################################
clear
hsoub ~>
</syntaxhighlight>


{
== تغيير ملفات إعدادات الصدفة ==
يجب أن يعاود المستخدم الاتصال بالنظام عند تعديل أي من الملفات التي ذكرناها بالأعلى من أجل تفعيل تلك التعديلات، أو كطريقة أخرى يستخدم أمر <code>source</code> على الملف الذي عدّله، وتُطبَّق التعديلات على جلسة الصدفة الحالية عند تفسير برنامج bash بتلك الطريقة:


        local pid
'''شكل 3.1 : محثات مختلفة لكل مستخدم.'''
[[ملف:prompts.png|وصلة=https://wiki.hsoub.com/%D9%85%D9%84%D9%81:prompts.png|بديل=صدفة bash بها أمثلة لبيان اختلاف محث المستخدم العادي عن المستخدم الجذر|مركز]]
تُنفَّذ أغلب برامج bash في بيئات خاصة حيث لا تكتسب العمليات الفرعية المتغيرات إلا إن صُدِّرت من قِبَل الصدفة الأم. كذلك فإن تصدير الملف (sourcing) الذي يحتوي أوامر الصدفة هو إحدى طرق تطبيق التعديلات على بيئتك وضبط المتغيرات في الصدفة الحالية.


        pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }')
ويشرح ذلك المثال أيضًا استخدام المحثات المختلفة لكل مستخدم، وفي الحالة التي لدينا فإن علامة # تعني أنك الآن في طور المستخدم الجذر، فيجب أن تحذر من كل أمر تدخله إذ أن الجهاز لن يتردد في تنفيذه حتى لو عنى ذلك تدمير ملفات من صلب النظام، على عكس محث $ الخاص بالمستخدم العادي الذي له صلاحيات محدودة في تنفيذ الأوامر التي يدخلها.


        echo -n "killing $1 (process $pid)..."
لاحظ أن source <code>resourcefile</code> هو نفسه <code>resourcefile.</code> .


        kill -9 $pid
في حال اشتبهت عليك تلك الإعدادات الكثيرة ورأيت إعدادات لا تعرف أين أصلها، فاستخدم أمر <code>echo</code>  تمامًا كما تفعل من أجل تنقيح برامج bash (انظر [[Bash/debugging Bash scripts|تنقيح برامج Bash]])، فمثلًا يمكنك إضافة سطر مثل هذا:<syntaxhighlight lang="bash">
echo "Now executing .bash_profile.."
</syntaxhighlight>أو<syntaxhighlight lang="bash">
echo "Now setting PS1 in .bashrc:"
export PS1="[some value]"
echo "PS1 is now set to $PS1"
</syntaxhighlight>


        echo "slaughtered."
== انظر أيضًا ==
* [[Bash/aliases|الأوامر البديلة.]]
* [[Bash/conditional statements|البُنى الشرطية في Bash]].


}
== مصادر ==
دليل Bash للمبتدئين. صفحة [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_01.html ملفات تهيئة الصدفة].
[[تصنيف:Bash]]
[[تصنيف:Bash Shell Initialization Files]]

مراجعة 13:23، 4 أغسطس 2018


ملفات الإعدادات على مستوى النظام System-wide Configuration files

etc/profile/

تقرأ Bash التعليمات الموجودة في etc/profile/ إن استدعيْت بشكل تفاعلي عبر خيار login-- أو إن استدعيْت كـ sh ، تضبط تلك التعليمات عادة متغيرات PATH - USER - MAIL - HOSTNAME - HISTSIZE ، وهي متغيرات تابعة للصدفة.

كذلك تُضبط قيمة umask في etc/profile/ على بعض الأنظمة، أما في بعضها الآخر فإن هذا الملف يحتوي على موجّهات (pointers) لملفات الإعدادات الأخرى مثل:

  • ملف etc/inputrc/ ، وهو ملف تهيئة على مستوى النظام لأمر readline، حيث يمكنك تهيئة أسلوب الجرس (bell style) لسطر الأوامر.
  • مجلد etc/profile.d/ ، وهو يحتوي الملفات التي تضبط سلوك برامج محددة على مستوى النظام.

يجب أن تكون كل الإعدادات التي تريد تطبيقها على جميع المستخدمين في النظام لديك موجودة في ذلك الملف -etc/profile/-، وقد يكون شكله مشابهًا لما يلي:

# /etc/profile

# System wide environment and startup programs, for login setup

PATH=$PATH:/usr/X11R6/bin

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

# Keyboard, bell, display style: the readline config file:
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi

PS1="\u@\h \W"

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1

# Source initialization files for specific programs (ls, vim, less, ...)
for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        . $i
    fi
done

# Settings for program initialization
source /etc/java.conf
export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins"

PAGER="/usr/bin/less"

unset i

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

يحتوي مصدر Bash على نماذج لملفات profile من أجل الاستخدام العام أو الفردي، وتمر تلك الملفات -والملف في المثال بالأعلى- على عدة تغييرات قبل استخدامها في بيئتك.

etc/bashrc/

ربما يكون من الأفضل أن تضع الملفات الخاصة بتهيئة Bash في هذا الملف إن كنت تعمل على أنظمة بها أنواعًا مختلفة من الصدفات، ذلك أن الصدفات الأخرى -صدفة بورن مثلًا- تقرأ ملف etc/profile/.

ويمكن تلافي حدوث الأخطاء التي تولّدها الصدفات التي لا تفهم البنية اللغوية (syntax) لصدفة bash بفصل ملفات الإعدادات (configuration files) للأنواع المختلفة من الصدفات، ويشير ملف bashrc./~ الخاص بالمستخدم في تلك الحالات إلى etc/bashrc/ من أجل تضمينه في عملية تهيئة الصدفة (shell initialization) عند تسجيل الدخول.

قد تجد أن ملف etc/profile/ الموجود في نظامك لا يحتوي إلا على إعدادات بيئة الصدفة وإعدادات بدء تشغيل البرنامج، بينما يحتوي etc/bashrc/ على تعريفات على مستوى النظام (system-wide definitions) لدوال الصدفة وأوامرها البديلة. أيضًا قد يشار إلى ملف etc/bashrc/ داخل ملف etc/profile/ أو في ملفات تهيئة الصدفة الخاصة بالمستخدم.

يحتوي المصدر على نماذج لملفات bashrc، كما ستجد نسخة منه في usr/share/doc/bash-2.05b/startup-files/ . إليك جزءًا مما يكون في ملف bashrc الذي يأتي مع توثيق Bash:

alias ll='ls -l'
alias dir='ls -ba'
alias c='clear'
alias ls='ls --color'

alias mroe='more'
alias pdw='pwd'
alias sl='ls --color'

pskill()
{
        local pid

        pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }')
        echo -n "killing $1 (process $pid)..."
        kill -9 $pid
        echo "slaughtered."
}

وهو يحتوي على أوامر بديلة (aliases) مفيدة إضافة إلى الأوامر البديلة العامة، إذ أنها تضمن تنفيذ الأمر الذي تدخله حتى لو أخطأت في تهجئته، انظر الأوامر البديلة. يحتوي هذا الملف أيضًا على دالة pskill، انظر الدوال في Bash لمزيد من الشرح عن الدوال.

ملفات إعدادات المستخدم

لا أجد تلك الملفات على حاسوبي!؟

قد لا تجد تلك الملفات في مجلد المنزل (home) لديك، فأنشئها بنفسك إن كانت غير موجودة.

bash_profile./~

يفضّل استخدام هذا الملف في حالة إعداد البيئات لكل مستخدم على حدة، وللمستخدمين هنا أن يضيفوا خيارات إضافية أو يغيروا الإعدادات الافتراضية:

hsoub~> cat .bash_profile
#################################################################
#                                                               #
#   .bash_profile file                                          #
#                                                               #
#   Executed from the bash shell when you log in.               #
#                                                               #
#################################################################

source ~/.bashrc
source ~/.bash_login
case "$OS" in
  IRIX)
    stty sane dec
    stty erase
    ;;
#  SunOS)
#    stty erase
#    ;;
  *)
    stty sane
    ;;
esac

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

bash_login./~

أما هذا الملف فيحتوي إعدادات محددة لا تُنفَّذ عادة إلا حين تسجل الدخول إلى النظام، وسنستخدمها في المثال التالي لضبط قيمة umask وعرض قائمة من المستخدمين المتصلين حال تسجيل الدخول، كما سيظهر لهذا المستخدم تقويمًا بالشهر الحالي:

#######################################################################
#                                                                     #
#   Bash_login file                                                   #
#                                                                     #
#   commands to perform from the bash shell at login time             #
#   (sourced from .bash_profile)                                      #
#                                                                     #
#######################################################################
#   file protection
umask 002       # all to me, read to group and others
#   miscellaneous
w
cal `date +"%m"` `date +"%Y"`

وسيُقرأ هذا الملف في غياب bash_profile./~ .

profile./~

يُقرأ ملف profile./~ في غياب ملفي bash_profile./~ و bash_login./~ ، وقد يحتوي هذا الملف على نفس الإعدادات التي -في تلك الحالة- تستطيع الصدفات الأخرى الوصول إليها. لاحظ أن تلك الصدفات قد لا تفهم البنية اللغوية لصدفة bash .

bashrc./~

من المعتاد الآن أن ترى صدفة non-login بسبب تسجيل المستخدم للدخول من الواجهات الرسومية، ولا يُدخل المستخدم بياناته في تلك الحالة -اسم المستخدم وكلمة المرور- فلا تتم عملية المصادقة، وعندها تبحث Bash عن ملف bashrc./~، لذا فإن ذلك الملف يشار إليه في الملفات المقروءة عند تسجيل الدخول مما يعني أنك لا تحتاج إلى إدخال نفس الإعدادات في عدة ملفات.

وفي المثال التالي لملف bashrc. لمستخدم ما، تجد أنه قد حُدِّدت بعض الأوامر البديلة وضُبطَت متغيرات لبرامج محددة، بعد قراءة ملف etc/bashrc/ :

hsoub ~> cat .bashrc
# /home/franky/.bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc

fi

# shell options

set -o noclobber

# my shell variables

export PS1="\[\033[1;44m\]\u \w\[\033[0m\] "
export PATH="$PATH:~/bin:~/scripts"

# my aliases

alias cdrecord='cdrecord -dev 0,0,0 -speed=8'
alias ss='ssh octarine'
alias ll='ls -la'

# mozilla fix

MOZILLA_FIVE_HOME=/usr/lib/mozilla
LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins
MOZ_DIST_BIN=/usr/lib/mozilla
MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin
export MOZILLA_FIVE_HOME LD_LIBRARY_PATH MOZ_DIST_BIN MOZ_PROGRAM

# font fix
alias xt='xterm -bg black -fg white &'

# BitchX settings
export IRCNAME="frnk"

# THE END
hsoub ~>

ستجد أمثلة أكثر في حزمة Bash، وتذكر أن نماذج الملفات الموجودة قد تحتاج إلى تعديلات قبل استخدامها من أجل أن تعمل في بيئتك.

bash_logout./~

يحتوي هذا الملف على تعليمات محددة لإجراء تسجيل الخروج، وفي المثال التالي فإنها تعليمة واحدة "clear" لتترك النافذة خالية بعد إغلاقها، ومثل ذلك الأمر مفيد في الاتصالات عن بعد (remote connections):

hsoub ~> cat .bash_logout
#######################################################################
#                                                                     #
#   Bash_logout file                                                  #
#                                                                     #
#   commands to perform from the bash shell at logout time            #
#                                                                     #
#######################################################################
clear
hsoub ~>

تغيير ملفات إعدادات الصدفة

يجب أن يعاود المستخدم الاتصال بالنظام عند تعديل أي من الملفات التي ذكرناها بالأعلى من أجل تفعيل تلك التعديلات، أو كطريقة أخرى يستخدم أمر source على الملف الذي عدّله، وتُطبَّق التعديلات على جلسة الصدفة الحالية عند تفسير برنامج bash بتلك الطريقة:

شكل 3.1 : محثات مختلفة لكل مستخدم.

صدفة bash بها أمثلة لبيان اختلاف محث المستخدم العادي عن المستخدم الجذر

تُنفَّذ أغلب برامج bash في بيئات خاصة حيث لا تكتسب العمليات الفرعية المتغيرات إلا إن صُدِّرت من قِبَل الصدفة الأم. كذلك فإن تصدير الملف (sourcing) الذي يحتوي أوامر الصدفة هو إحدى طرق تطبيق التعديلات على بيئتك وضبط المتغيرات في الصدفة الحالية.

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

لاحظ أن source resourcefile هو نفسه resourcefile. .

في حال اشتبهت عليك تلك الإعدادات الكثيرة ورأيت إعدادات لا تعرف أين أصلها، فاستخدم أمر echo تمامًا كما تفعل من أجل تنقيح برامج bash (انظر تنقيح برامج Bash)، فمثلًا يمكنك إضافة سطر مثل هذا:

echo "Now executing .bash_profile.."

أو

echo "Now setting PS1 in .bashrc:"
export PS1="[some value]"
echo "PS1 is now set to $PS1"

انظر أيضًا

مصادر

دليل Bash للمبتدئين. صفحة ملفات تهيئة الصدفة.