فهرست عنوانها
چکیده
دراین فصل در باره روشهای متنوعی که میتواند محیط شل را تحت تأثیر قرار دهد، بحث خواهیم کرد:
ویرایش فایلهای ارزشدهی اولیه شل
کاربرد متغیرها
استفاده از سبکهای متفاوت نقلقول
اجرای محاسبات عددی
تخصیص مستعارها
کاربرد بسط و جایگزینی
موقعیکه Bash با گزینه --login
به صورت محاورهای احضار میشود، یاوقتی به عنوان sh فراخوانی میشود، دستورالعملهای فایل /etc/profile
را میخواند. این دستورات معمولاً متغیرهای PATH
، USER
، MAIL
،HOSTNAME
و HISTSIZE
شل را تنظیم میکنند.
دربرخی سیستمها ، مقدار umask در فایل /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
این فایل پیکربندی، برخی متغیرهای اساسی محیط شل را مقداردهی میکند، علاوه براین برخی متغیرهای موردنیاز کاربران برای اجرای جاوا ویا برنامههای کاربردی جاوا در مرورگر های آنهارا تنظیم میکند. بخشی به نام « متغیرها » را ملاحظه کنید.
فصل ۷ ، دستورات شرطی را برای اطلاع بیشتر درباره if شرطی به کار رفته در این فایل، ملاحظه کنید، در فصل ۹ ، وظایف تکراری ساختار حلقههایی مانند for بحث شده است .
منابع Bash محتوی فایلهای نمونه profile
برای استفاده کلی یا انفرادی میباشد. این نمونه ها ونیز مثال فوق برای کارکردن در محیط شمابه تغییراتی نیاز دارند!
در سیستمهایی که چندین شل ارائه میکنند، ممکن است قرار دادن پیکربندی مخصوص Bash در این فایل بهتر باشد چون فایل /etc/profile
توسط سایر شلها از قبیل شل بورن، نیز خوانده میشود. خطاهای ناشی از عدم شناخت دستور زبان Bash، تولید شده توسط سایر شلها، با جدا کردن فایلهای پیکربندی انواع متفاوت شل، پیش گیری میشود. درچنین حالاتی، فایل ~/.bashrc
کاربر، به منظور پیوست کردن ارزش دهی شل در فرایند لاگین ، میتواند به فایل /etc/bashrc
متوجه شود .
ممکن است ملاحظه نمایید که فایل /etc/profile
در سیستم شما، فقط تنظیمات محیط شل و برنامه شروع اولیه رانگاه میدارد، در حالیکه فایل /etc/bashrc
محتوی تعریف توابع و مستعارهای تمام سیستم میباشد . فایل /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." }
غیر از مستعارهای عمومی، این فایل شامل مستعارهای سودمندی است که موجب کار کردن فرمانها حتی اگر املای آنها را اشتباه به کار ببرید، میگردند.ما مستعارها را در بخشی به نام « ایجاد و حذف مستعارها » بحث خواهیم نمود. این فایل شامل یک تابع pskill میباشد، توابع رابه طور مفصل در فصل ۱۱ ، توابع مطالعه خواهیم نمود.
من این فایلها را ندارم؟! | |
---|---|
این فایلها ممکن است به طور پیشفرض در دایرکتوری خانگی شما موجود نباشند، در صورت نیاز آنها را ایجاد کنید. |
این یک فایل پیکربندی مناسب ، جهت پیکربندی محیط کاربران جداگانه میباشد . در این فایل، کاربران میتوانند گزینههای پیکربندی دیگری اضافه کنند یا تنظیمات پیشفرض را تغییر دهند:
franky~>
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
کاربر نیز خوانده میشوند.
این فایل محتوی تنظیمات مخصوصی است که به طور معمول فقط موقعی اجرا میشوند که شما به سیستم متصل ( 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
، این فایل خوانده میشود .
در غیبت فایل ~/.bash_profile
و ~/.bash_login
فایل ~/.profile
خوانده میشود. این فایل همان پیکربندیها را میتواند نگهداری کند که بعد توسط سایر شلها نیز قابل دستیابی است. به خاطر آن که سایر شلها ممکن است دستور زبان Bash را نفهمند .
امروزه، بیشتر استفاده از یک شل غیرلاگین رایج است، به عنوان مثال موقعی که به طور گرافیکی لاگین کرده و از ترمینالهای محیط X استفاده میکنیم. بر روی چنین پنجره بازشدهای کاربر نباید نام کاربری و یا پسورد وارد کند، تأیید نمودن انجام نمیشود .Bash فایل ~/.bashrc
را جستجو میکند، وقتی این انجام شد ،همچنین به علاوه به فایلهایی که موقع لاگین خوانده میشوند رجوع میکند، این بدین معنی است که شما نباید همان تنظیمات را در چندین فایل وارد کنید.
در فایل .bashrc
این کاربر، بعد از خوانده شدن فایل /etc/bashrc
سیستم گسترده، چند مستعار تعریف شده و متغیرهایی برای برنامه معینی تنظیم گردیده است :
franky ~>
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 ENDfranky ~>
مثالهای بیشتری، در بسته Bash میتوان یافت. به خاطر داشته باشید که فایلهای نمونه ممکن است برای کارکردن در محیط شما نیاز به تغییر داشته باشند.
مستعارها در بخشی به نام « مستعارها » بحث شده است.
این فایل محتوی دستورالعملهای ویژه فرایند قطع ارتباط ( logout ) می باشد. در این مثال ،پنجره ترمینال موقع قطع ارتباط پاک میشود. این کار برای ارتباط راه دور مفید است، که پس از بستن آن یک پنجره پاکیزه به جا میماند.
franky ~>
cat.bash_logout
####################################################################### # # # Bash_logout file # # # # commands to perform from the bash shell at logout time # # # ####################################################################### clearfranky ~>
موقعی که هر یک از فایلهای فوق تغییر میکند برای اینکه تغییرات اثر کند، کاربران باید مجدداً به سیستم وارد شوند، یا اینکه فایل تغییر یافته را source کنند. با تفسیر اسکریپت به این طریق، تغییرات به نشست جاری شل اعمال میگردد:
اکثر اسکریپتهای پوسته در یک محیط شخصی اجرا میشوند: متغیرها بدون آن که توسط شل والد صادر ( export
) شوند به پردازشهای فرزند به ارث نمیرسند. اجرای دستور Source
بافایل محتوی دستورات شل روشی برای اعمال تغییرات در محیط خودتان و قرار دادن متغیرها در پوسته جاری میباشد.
این مثال همچنین استفاده از تنظیمات اعلان فرمان متفاوت برای کاربران مختلف را نمایش میدهد. در این حالت ، قرمز به معنی خطر است. وقتی یک اعلان سبز رنگ دارید خیلی نگران نباشید.
توجه نمایید که source resourcefile
همان . resourcefile
میباشد.
باید وقت زیادی را صرف این فایلهای پیکربندی نمایید، و در مواجه با تنظیماتی که سرچشمه معتبری ندارند، از دستور echo استفاده کنید، دقیقاً مانند اشکالزدایی اسکریپتها، بخشی به نام « اشکالیابی قسمتی از اسکریپت » را ملاحظه کنید. میتوانید چنین سطری اضافه کنید:
echo "Now executing .bash_profile.."
یا مثل این یکی :
echo "Now setting PS1 in .bashrc:" export PS1="[some value]" echo "PS1 is now set to $PS1"