چگونه با Bash شاد کام باشیم (2)

استاندارد

یا علایم خاص در Bash

در قسمت قبل به بحث completion در Bash پرداختیم. این بار بحث شیرین Special Characters را خواهیم داشت. کاراکترهای خاص برای ایجاد قابلیتها و کاربردهای خاصی طراحی شدند که در امور روزمره کار با shell و همچنین در داشتن shell scriptهای بهینه‌تر به ما کمک میکنند.

Pipe (|)
این کاراکتر (که با Shift+\ قابل دسترسیه) همونطور که از اسمش پیداست کار ارتباطی انجام میده، به این شکل که با استفاده از pipe میشه خروجی (stdout) یک دستور رو به دستور بعدش فرستاد. کاربرد این موضوع زمانی هست که بخواید داده‌ای رو با استفاده از چند دستور یا برنامه پردازش کنید و خروجی فیلتر شده یا متفاوتی داشته باشید.
مثال ساده: برای دیدن یک پروسه خاص از لیست پروسه‌ها:

ps aux | grep apache2

دستور ps با پارامترهای داده شده فهرستی از پروسه‌های فعال در سیستم به ما میده. این فهرست معمولا طولانی هست. دستور grep هم عبارت داده شده رو داخل خطوط یک فایل یا ورودی پیدا میکنه و کل خط رو برمیگدونه. حالا نتیجه ترکیب این دو دستور با pipe اینه که خطوط حاوی عبارت apache2 از بین لیست طولانی پروسه‌ها جدا میشه و نمایش داده میشه. Pipe میتونه به تعداد نامحدودی در یک دستور خطی استفاده بشه:

cd /home; du --max-depth=1 ./ | sort -nr | head | awk '{ print $2 }' | cut -d/ -f2

که این دستور لیست 10 شاخه‌ای که بیشترین فضا رو در شاخه home اشغال کردند نمایش میده.

ًRedirections (>,<,>>)
این کاراکترها برای تغییر مسیر ورودی (stdin) و خروجی (stdout) و یا حتی خطاها (stderr) کاربرد دارند. برای مثال میتونید از یک فایل حاوی داده به عنوان ورودی استفاده کنید و بعد از پردازش لازم نتیجه رو در فایل دیگه‌ای ذخیره کنید یا به انتهاش اضافه (append) کنید.
کاراکتر > برای استفاده از محتویات یک فایل (معمولا متنی) به عنوان ورودی (stdin) استفاده میشه. کاراکتر < برای ذخیره خروجی (stdout) یک دستور در یک فایل و کاراکتر << برای append کردن خروجی به انتهای فایل استفاده میشه.
برای مثال از فایلی به نام ‘results’ حاوی لیست نمرات و اسامی دانش‌آموزان سطرهایی حاوی عبارت ali را جدا کرده و در فایل list ذخیره میکنیم:

sort -nr < results | grep -in ali > list

از این کاراکترها برای تغییر مسیر stdout به stderr و بالعکس هم میشه استفاده کرد، مثلا برای دستوراتی که به طور خودکار (مثلا cron) اجرا میشند گاهی این کار انجام میشه:

some_command 2>&1 >> /var/log/command_output

Tilde (~)
این کاراکتر همواره به شاخه خانگی (home directory) کاربر فعلی (که شما دارید باهاش کار میکنید یا دستور به نام اون اجرا میشه) اشاره میکنه. در مسیر دادن به کار میاد:

cd ~/projects → cd /home/ali/projects

به خواندن ادامه دهید