انجمن کاربران لینوکس ایران - تکنوتاکس سابق

نسخه ي کامل: سوال در مورد BASH
شما در حال مشاهده نسخه ي متني اين صفحه هستيد. مشاهده نسخه کامل تر با قالب بندي صحيح
با سلام خدمت دوستان

در حال مطالعه یک کتاب هستم که یکجا را خوب نفهمیدم. آیا دستور

COMMAND1 < COMMAND2

به معنی آن است که خروجی Standard Output مربوط به COMMAND2 به Standard Input مر بوط به COMMAND1 متصل می شود؟

ضمنا آیا دسور

COMMAND1 | COMMAND2

به معنی آن است که خروجی Standard Output مربوط به COMMAND1 به ورودی Standard Input مربوط به COMMAND2 انتقال می یابد؟

میتوان گفت A < B دقیقا معادل B | A است یا خیر؟

با تشکر
توی مثال اول COMMAND2 دستور نیست . بلکه یک فایل هستش .
مثل :
کد :
less < /etc/passwd
این مثال رو ببین :
یک مثال خوب از کاربردهای redirect در پوسته لینوکس :
کد :
head -c 512 < /dev/sda > mbr.backup
ببینم ! میتونی تفسیرش کنی ؟ (توجه داشته باش که این دستور رو باید با کاربر root اجرا کنی)
آهان.... الان متوجه شدم.... دست شما درد نکنه

در مورد اون مثال به نظرم میرسه که از اونجا که Master boot record در واقع ۵۱۲ بایت اول دیست است در واقع ابتدا head -c 512 < /dev/sda مستر بوت رکورد رو به Standad output stdout میفرسته و بعدش خروجی به mbr.backup لوله کشی میشه.... درسته؟

حالا یه سوال: در واقع من خیلی از دستوراتی مثل

find | grep THE-FILE-NAME

استفاده میکردم و حالا دارم درک میکنم چطور کار میکنه. ابتدا find کل فایل های موجود رو به stdout میفرسته و بعد grep اون سطرایی که حاوی THE-FILE-NAME هستند رو سوا میکنه. درسته؟

حال دستور grep THE-TEXT-TO-FIND رو که اجرا میکنم درست مثل یه ادیتور میشه. دلیلش اونه که منتظر فایله؟؟؟؟ درسته دیگه؟؟؟؟

چطور میتونم خودم یه متن چند سطری همونجا تایپ کنم تا داخلش SEARCH کنه؟؟؟

EOF رو چطور خودم ایجاد کنم و بهش بفهمونم؟
نه دیگه ... نشد ... !
دستور grip می گرده توی یک فایل و دنبال اون بخش مورد نظر میگرده . یا اینکه خروجی یک دستور رو میگیره و در این خروجی دنبال چیز خاصی می گرده .
مثلا :
کد :
grep root /etc/passwd
find /etc | grep hal
در رابطه با EOF هم باید بگم که من تا الان باهاش کار نکردم ولی اگه درست گفته باشم یک جور متغیر هستش که حتما هم نباید اسمش EOF باشه . این متغیر شامل یک سری دستورات و خطوط هستش .
مثلا :
کد :
cat >> test << EOF
line 1
line 2
line 3
EOF
البته این نکته رو هم بگم که از این متغیر به چند روش استفاده میشه .
آقا خودم پیداش کردم... کلید CTRL+D هستش که معادل End of file رو به buffer تفهیم میکنه.... امتحان کن
یادمه قدیما که یکم C کار میکردم در DOS کلید CTRL+Z بود ولی خب در لینوکس ظاهری CTRL+D هستش....
آقا جان من قاطی کردی . چرا دوتا پست مجزا نوشتی که الان اینجوری بشه ؟
آقا باور کن کار میکنه....
مثلا این کارو بکن:

کد :
[bahman@intel-system ~]$ sed 's/mesal/azmayesh/'
in yek mesal baraye barresi mibashad.
in yek azmayesh baraye barresi mibashad.

در انتهای خط کلید ctrl+d رو بزن. درست مثل این میمونه.

کد :
[bahman@intel-system ~]$ echo 'in yek mesal baraye barresi mibashad.'>test
[bahman@intel-system ~]$ cat test | sed 's/mesal/azmayesh'
sed: -e expression #1, char 16: unterminated `s' command
[bahman@intel-system ~]$ cat test | sed 's/mesal/azmayesh/'
in yek azmayesh baraye barresi mibashad.
[bahman@intel-system ~]$