گاهی اوقات صرف نظر کردن از مستعارها (و توابع، از جمله توابع داخلی پوسته) سودمند است. به عنوان مثال، شاید در سیستم خود این تنظیم را داشته باشید:
alias grep='grep --color=auto'
اما گاهی اوقات، شما به انجام یک فرمان یک سطری به طرف لولهها نیاز دارید که در آنجا رنگها آشفتگی ایجاد میکنند. هر یک از موارد زیر را میتونید استفاده کنید:
unalias grep; grep ... #1 unalias -a; grep ... #2 "grep" ... #3 \grep ... #4 command grep ... #5
#1 قبل از استفاده از grep مستعار آن را عزل میکند، اگر grep مستعار نشده باشد، کاری انجام نمیدهد. به هر حال مستعار برای بقیه نشست آن پوسته نیز از بین رفته است.
#2 مشابه قبلی، اما تمام مستعارها حذف میشوند.
#3 و #4 یکسان هستند، به شما اجازه میدهند یکبار grep را در حالیکه از مستعار آن صرفنظر شده اجرا کنید، اما به طور کلی خیر.
#5 متمایز از دیگران است، در آن از مستعارها، توابع، و کلیدواژههای پوسته از قبیل time صرفنظر میشود. بازهم دستورات داخلی مانند echo نسبت به /bin/echo ترجیح داده میشوند. چند گزینه دارد که شاید بخواهید استفاده کنید -- help command را ببینید.
انتخاب #6 نوشتن تابع خودتان خواهد بود که وقتی ترمینال خروجی استاندارد نباشد رفتار نامطلوب مرتکب نمیشود. به این ترتیب:
ls() { if test -t 1; then command ls -FC "$@" else command ls "$@" fi }
استفاده از این تابع به جای alias ls='ls -FC' موقعی که تابع در یک خط لوله به کار میرود(یا هر وضعیت دیگر که در آن خروجی استاندارد ترمینال نیست) بعضی پرچمهای خاص را غیر فعال میکند.
برای بحث بیشتر در مورد استفاده از توابع به جای مستعارها پرسش و پاسخ شماره 80 را ببینید.
پرسش و پاسخ 86 (آخرین ویرایش 2009-08-30 21:09:35 توسط localhost)