انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: Keivan در 06 مهر 1388، 01:01 ب‌ظ

عنوان: چندتا سوال در مورد script نویسی برای bash
ارسال شده توسط: Keivan در 06 مهر 1388، 01:01 ب‌ظ
1) کی میدونه این یعنی چی؟ من که کفم بریده. از هر طرف نگاه می کنم نمی تونم بخونمش. ](*,) میشه یکی این دستور sed رو برای ما ترجمه کنه.
glibtoolize --version | sed -n '1s/.* \([0-9]\).*/\1/p

2) چرا گاهی برای وصل کردن ورودی خروجی برنامه ها از "|" استفاده میشه مثل

lsmod | grep b43
ولی گاهی از روشی مثل دستور زیر

command 2>&1 | tee log

اصولا فرقشون چیه اینا؟ لطفا جواب هرکدوم رو میدونید ما را از علم خودتون محروم نفرمایید.
عنوان: پاسخ به: چندتا سوال در مورد script نویسی برای bash
ارسال شده توسط: آزادنویس در 06 مهر 1388، 02:12 ب‌ظ
نقل‌قول
1) کی میدونه این یعنی چی؟ من که کفم بریده. از هر طرف نگاه می کنم نمی تونم بخونمش. ](*,) میشه یکی این دستور sed رو برای ما ترجمه کنه.
برای دسترسی به تعریف کوتاهی از هر دستور تایب کن:
whatis COMMANDNAMEعلاوه بر این برای دسترسی و خواندن فایل های کمکی همراه برنامه به شرط اینکه وجود داشته باشند تایپ کن:
man COMMANDNAMEیا برای یک توضیح کوتاه در خط فرمان در مورد نام برنامه و پارامترهای ورودی آن تایپ کن:
COMMANDNAME --helpاون ترکیبی هم که برات عجیبه یک Regular Expression هست یعنی یک عبارت منظم  و الگویی که برای تشخیص و فیلتر کردن یک سری ترکیبات خاص که با اون مطابق هستند بکار گرفته می شه. برای درک انواع عبارات منظم کافیه همین عبارت رو جستجو کنی مقالات زیادی تو گوگل و ویکی پدیا پیدا می کنی.

نقل‌قول
2) چرا برای وصل کردن ورودی خروجی برنامه ها از "|" استفاده میشه مثل
به این کاراکتر pipe گفته می شه که خروجی یک دستور رو به ورودی دستور بعدی منتقل می کنه.
عنوان: پاسخ به: چندتا سوال در مورد script نویسی برای bash
ارسال شده توسط: Keivan در 06 مهر 1388، 04:06 ب‌ظ

به این کاراکتر pipe گفته می شه که خروجی یک دستور رو به ورودی دستور بعدی منتقل می کنه.


ممنون از توضیحاتتنون. میشه فرق اون 2 مدل مختلف از pipe رو هم به من یاد بدین.
عنوان: پاسخ به: چندتا سوال در مورد script نویسی برای bash
ارسال شده توسط: آزادنویس در 06 مهر 1388، 08:11 ب‌ظ
در لینوکس همه چیز به شکل فایل دیده می شود. حتی تمام قطعات مثل ماوس و کی بورد و به هریک آدرس یک فایل اختصاص پیدا می کنه. لینوکس به هر برنامه اجازه دسترسی به سه فایل مهم رو می ده: standard input, standard output and standard error و هر کدام از این فایلها شماره مخصوص خودشون رو دارند. به ترتیب:
# Standard Input - 0
# Standard Output - 1
# Standard Error - 2
حالا شما می توانید این سه جریان رو از هر دستور یا قطعه( که به صورت فایل دیده می شه) به سمت هر دستور یا فایل دیگری «هدایت» کنید، به این کار redirect کردن گفته می شه. علامت < برای هدایت خروجی است و علامت > برای هدایت ورودی است. شما حتی می توانید خطاهایی که یک دستور می دهد را هدایت کنید، برای اینکار جلوی دستور می نویسید:
2>عدد دو نشاندهنده اینست که خروجی خطا را می خواهیم و علامت < برای هدایت کردن آن است که ترکیب این دو منجر به هدایت خروجی خطا به هر جا ما بخواهیم می شود.
مثال هدایت خروجی یک لیست به یک فایل:
$ ls -l myfile.txt > test.txtمثلا هدایت خروجی خطا وقتی فایل پیدا نشود به یک فایل دیگر، هر دو دستور زیر را اجرا کنید و تفاوت را ببینید. در دستور دوم فایلی به نام تست تشکیل می شود محتویات آنرا ببینید:
ls -l myfile.txt > test.txtls -l myfile.txt 2> test.txt
حالا برویم سراغ دستور شما:
COMMANDNAME 2>&1|tee yourlog.logسینتکس مورد نظر شما یعنی this: 2>&1 جریان شماره دو رو هدایت می کنه(Standard Error) و علاوه براون روی مسیر شماره یک(Standard Output) هم اون رو نمایش می ده یعنی روی ترمینال هم نمایش داده می شه. سینتکس "|" هم خروجی دستور ما رو به ورودی دستور tee می فرسته. که کار دستوری tee هم log کردن و ذخیره کردن ورودی اش درون یک فایل متنی است.

برای توضیحات بیشتر به زبان انگلیسی به این لینک مراجعه کنید: http://linuxhelp.blogspot.com/2006/01/inputoutput-redirection-made-simple-in.html (http://linuxhelp.blogspot.com/2006/01/inputoutput-redirection-made-simple-in.html) و همینطور این لینک:‌ https://lists.ubuntu.com/archives/ubuntu-users/2005-July/042328.html (https://lists.ubuntu.com/archives/ubuntu-users/2005-July/042328.html)
عنوان: پاسخ به: چندتا سوال در مورد script نویسی برای bash (حل شد)
ارسال شده توسط: Keivan در 07 مهر 1388، 06:33 ق‌ظ
خیلی ممنون از توضیح کاملتون. ممنون از وقت و حوصله ای که برای جواب دادن به خرج دادین. مشکلم کاملا حل شد. \\:D/ :D