راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

بسط پوسته »
« بسط‌های بیشتر Bash

مستعارها

مستعارها چیستند؟

یک مستعار اجازه می‌دهد، وقتی یک کلمه به عنوان اولین کلمه یک دستور ساده به کار می‌رود، یک رشته جایگزین آن بشود. پوسته لیستی از مستعارها را نگهداری می‌کند، که می‌توانند با دستورات داخلی alias و unalias نصب و عزل بشوند. دستور alias بدون گزینه، مستعارهای شناخته شده پوسته جاری را لیست می‌کند.

franky: ~> alias
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias PAGER='less -r'
alias Txterm='export TERM=xterm'
alias XARGS='xargs -r'
alias cdrecord='cdrecord -dev 0,0,0 -speed=8'
alias e='vi'
alias egrep='grep -E'
alias ewformat='fdformat -n /dev/fd0u1743; ewfsck'
alias fgrep='grep -F'
alias ftp='ncftp -d15'
alias h='history 10'
alias fformat='fdformat /dev/fd0H1440'
alias j='jobs -l'
alias ksane='setterm -reset'
alias ls='ls -F --color=auto'
alias m='less'
alias md='mkdir'
alias od='od -Ax -ta -txC'
alias p='pstree -p'
alias ping='ping -vc1'
alias sb='ssh blubber'
alias sl='ls'
alias ss='ssh octarine'
alias tar='gtar'
alias tmp='cd /tmp'
alias unaliasall='unalias -a'
alias vi='eval `resize`;vi'
alias vt100='export TERM=vt100'
alias which='type'
alias xt='xterm -bg black -fg white &'

franky ~>

مستعارها برای تعیین نگرش پیش‌فرض یک فرمان، که چند نسخه از آن در سیستم شما موجود است، یا برایبرای تعیین گزینه‌های پیش‌فرض یک فرمان، سودمند می‌باشد. استفاده دیگر مستعارها برای اصلاح املای ناصحیح است .

اگر اولین کلمه هر دستور ساده، غیر نقل‌قولی باشد، برای مستعار بودن کنترل می‌شود. اگر مستعار باشد کلوه با متن مستعار تعویض می‌گردد. نام‌های مستعار و متن جایگزین می‌توانند شامل هر ورودی معتبر برای شل،از جمله کاراکترهای عام باشند، با این استثناء که نام مستعار نمی‌تواند شامل“=” باشد. اولین کلمه متن جایگزین از جهت مستعار بودن بررسی می‌شود، اماکلمه‌ای که به عنوان مستعار تشخیص داده شده و بسط یافته، برای دومین بار بسط نمی‌یابد. این به آن معنا می‌باشد که ممکن است کسی به عنوان نمونه ls را مستعارls -F نماید، در آن صورت Bash برای بسط متن به صورت بازگشتی سعی نخواهد نمود. اگر آخرین کاراکتر محتوای یک مستعار کاراکتر فاصله یا tab باشد، کلمه بعدی دستور نیز برای بسط مستعار بررسی می‌شود.

وقتی پوسته، محاوره‌ای باشد مستعارها بسط نمی‌یابند، مگر این که گزینه expand_aliases با استفاده از دستور داخلی shopt پوسته تنظیم شده باشد.

ایجاد نمودن و پاک کردن مستعارها

مستعارها با دستور داخلی alias پوسته تولید می‌شوند. برای استفاده دائمی alias را در یکی از فایل‌های مقداردهی اولیه پوسته قرار دهید، اگر فقط مستعار را در خط فرمان وارد کنید، فقط در شل جاری تشخیص داده می‌شود.

franky ~> alias dh='df -h'

franky ~> dh
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda7             1.3G  272M 1018M  22% /
/dev/hda1             121M  9.4M  105M   9% /boot
/dev/hda2              13G  8.7G  3.7G  70% /home
/dev/hda3              13G  5.3G  7.1G  43% /opt
none                  243M     0  243M   0% /dev/shm
/dev/hda6             3.9G  3.2G  572M  85% /usr
/dev/hda5             5.2G  4.3G  725M  86% /var

franky ~> unalias dh

franky ~> dh
bash: dh: command not found

franky ~>

Bash همیشه حداقل یک سطر کامل ورودی را قبل از اجرای هر فرمانی از آن سطر، ، می‌خواند. مستعارها وقتی بسط داده می‌شوند که یک دستور خوانذه می‌شود، نه موقعی که اجرا می‌شود. بنابراین، یک تعریف مستعار که در سطری با دستور دیگر قرار دارد ، تا موقع خواندن سطر بعدی مؤثر نخواهد بود. دستوراتی که در یک سطر بعد ازتعریف مستعار قرار دارند، از این مستعار تآثیر نمی‌پذیرند. همچنین موقعی که توابع اجرا شده‌اند، این رفتار مطرح می‌باشد. موقعی که تعریف یک تابع خوانده می‌شود، مستعارها بسط داده می‌شوند، نه وقتی که تابع اجرا می‌شود، زیرا یک تعریف تابع خودش، یک دستور مرکب است. درنتیجه، مستعارهای تعریف شده در یک تابع، تا وقتی که آن تابع اجرا نشده است، در دسترس نیستند. همیشه مراقب باشید، که تعریف مستعار را در یک سطر جداگانه قراردهید، و از alias در دستورات مرکب به کار نبرید.

پردازش‌های فرزند مستعارها را به ارث نمی‌برند. پوسته بورن (sh) مستعارها را شناسایی نمی‌کند.

مطالب بیشتر در باره توابع در فصل 11، توابع.

[Tip]توابع سریعتر هستند

مستعارها بعد از توابع مراجعه می‌شوند، بنابراین از توابع کندتر هستند. در حالیکه مستعارها برای فهمیدن، آسان‌تر می‌باشند، توابع پوسته تقریباً برای تمام مقاصد بر مستعارها ارجحیت دارند.

بسط پوسته »
« بسط‌های بیشتر Bash
ترجمه محمود پهلوانی