-
Brace Expansion
چهارشنبه 29 آبانماه سال 1392 16:03
بسط ابرو بسط ابرو یکی از جایگزینیهایی است که Bash روی فرمانها انجام میدهد. این بسط در ماهیت کاملاً مطابق قواعد دستور زبان است(درکی از مضمون ندارد). در اصل، به عنوان یک میانبر نوشتاری، برای فشرده سازی بیشتر فرمانها به کار میرود: mv foobar.{o,exe} obj # :معادل است با mv foobar.o foobar.exe obj یک بسط ابرو به یک کلمه...
-
Sub Shell
دوشنبه 27 آبانماه سال 1392 16:03
پوسته فرعی یکی از مفاهیم اساسی برنامهنویسی پوسته پوسته فرعی میباشد. در یک سیستم یونیکس هر پردازشی دارای سهم خود از حافظه میباشد، برای نگهداری متغیرهایش، توصیفگرهای فایل خودش، نسخه خودش از محیط به ارث برده از پردازش والدش، و مانند آن. تغییرات متغیرها (و سایر اطلاعات خصوصی)در یک پردازش بر هیچ یک از پردازشهای دیگری...
-
Environment
شنبه 25 آبانماه سال 1392 16:03
محیط متغیرهای محیط متغیرهای محیط باعث سردرگمی بسیاری هستند. عموماً اشخاص تصور میکنند «محیط» یک مخزن سراسری از تنظیمات برای سیستم گسترده است که پردازشها در آن غوطهور میشوند. این صحیح نیست. به طور خلاصه: متغیرهای محیط(نشان داده شده توسط env ) همان پارامترهای Bash (نشان داده شده با set ) نیستند . آنها سراسری نیستند...
-
Replacing Strings
جمعه 24 آبانماه سال 1392 10:01
تعویض رشتهها محتویات متغیرها جریانها متغیرها اگر آن رشته یک متغیر است، این میتواند (و باید)خیلی به سادگی با بسط پارامتر انجام بشود. انشعاب کردن به یک ابزار خارجی برای دستکاری رشتهها به افراط آهسته و غیر ضروری است. ادامه مطلب
-
چرا سطرهای فایل را با "for" نخوانید؟
سهشنبه 21 آبانماه سال 1392 16:03
سطرهای فایل را با for نخوانید چرا سطرهای فایل را با "for" نخوانید بسیاری گمان میکنند برای خواندن سطرهای یک فایل متن، باید یک حلقه for را به کار ببرند. این در بهترین حالت، بد ترکیب و کم بازده است، و در بسیاری از موقعیتها شکست میخورد. شما در عوض باید یک حلقه while به کار ببرید . چرای آن در اینجاست. اول، روش...
-
چرا نباید خروجی ls را تجزیه کنید؟
دوشنبه 20 آبانماه سال 1392 23:28
تجزیه ls فرمان ls(1) برای نشان دادن صفات یک فایل منفرد به شما(حداقل در برخی حالتها) نسبتاً مناسب است، اما وقتی از آن تقاضای یک لیست از فایلها را دارید، مشکل عظیمی وجود دارد: یونیکس در نام فایل تقریباً هر کاراکتری، از جمله فضای سفید، سطر جدید، علامت لوله(pipe)، و تقریباً هر مورد دیگری را که شما همیشه به عنوان جدا...
-
Bash Parser
جمعه 17 آبانماه سال 1392 23:04
تجزیه کننده Bash بدون چون و چرا شما باید از اینکه Bash چگونه فرمانهای شما را میخواند و آنها را به کُد قابل اجرا تجزیه میکند،، درک مناسبی داشته باشید. دانستن آنکه Bash چطور با کُد شما کار میکند، کلید نوشتن کُدی است که در Bash به خوبی کار کند. ادامه مطلب
-
Arithmetic Expression
دوشنبه 13 آبانماه سال 1392 23:23
عبارت محاسباتی محاسبات در BASH فقط حساب اعداد صحیح است. شما نمیتوانید حساب ممیز شناور در Bash انجام دهید، اگر آن توانایی را لازم دارید، پرسش و پاسخ شماره 22 را ببینید. همچنین گفتار Bash hackers را در باره نظریه دستور زبان کامل، ملاحظه کنید. ترکیب $[ ] نکوهیده شده است. برای آنکه به Bash بگوییم با اعداد به جای...
-
Arguments
پنجشنبه 9 آبانماه سال 1392 16:03
شناسهها این مطلب مقولهای را تشریح مینماید که احتمالاً مهمترین مبحث در باره برنامهنویسی پوسته است و بیش از همه به طور نادرست فهمیده شده است. بدون قید وشرط واجب است شما قبل از انجام هر کار مهم در پوسته، به طور کامل تمام آنچه در اینجا تشریح میگردد را درک کنید . درست نفهمیدن آنکه شناسهها کدامند و تفکیک کلمه چطور عمل...
-
به پایان آمد این دفتر
چهارشنبه 8 آبانماه سال 1392 16:03
سرانجام ترجمه بخش BashFAQ از ویکی Greg's Wiki شامل ۱۱۰ پرسش و پاسخ به پایان رسید. این مجموعه را به قالب pdf تبدیل نمودهام و برای دریافت در اینجا قرار دادهام. حکایت همچنان باقیست از یادداشت بعد، به برخی مفاهیم مهم که به صورت صفحات جداگانه در این ویکی قرار دارند و برای توضیحات تفصیلی، پیوند به آنها در متن راهنما و...
-
پرسش و پاسخ شماره ۱۱۰
سهشنبه 7 آبانماه سال 1392 16:10
پرسش و پاسخ شماره ۱۱۰ آیا میتوانم چیزی مشابه الگوها(templates) را با bash به کار ببرم؟ Bashهیچ روش درونی برای استفاده از قالب ها( templates) ندارد. اگر چه، نسبت به اهداف واقعی خود، ممکن است فقط بتوانید شگرد ارزیابی فایل با یک bash جدید یا پوسته نمونه را به کار ببرید. به هر حال، این مطلب در صفحه TemplateFiles بحث شده...
-
پرسش و پاسخ شماره ۱۰۹
سهشنبه 7 آبانماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۹ چگونه میتوانم بگویم که آیا اسکریپت من منبع شده(به طور نقطهای) یا اجرا گردیده است؟ به طور معمول موقعی که اشخاص این پرسش را مطرح میکنند، به دلیل آنست که میخواهند خطاهای کاربر را تشخیص داده و پیغام مناسبی برای آن تهیه کنند. یک نظریهای هست که میگوید نباید کاربر یونیکس را به این طریق نازپرورده...
-
انتظار برای خاتمه یافتن پردازش فرزند
سهشنبه 30 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۸ چطور در انتظار انجام چند پردازش فرزند بمانم؟ برای انجام این کار روشهای بیشماری موجود است، اما تمام آنها محدود به ابزارهای در دسترس هستند. من به چاره سازیهای زیر رسیدم . اگر میخواهید در انتظار تمام پردازشهای فرزند بمانید، به سادگی wait را بدون شناسه احضار کنید. اگر فقط میخواهید منتظر برخی، اما...
-
درج نشانه زمان در سطرهای یک جریان داده
دوشنبه 29 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۷ چگونه به هر سطر یک جریان مُهرتاریخ بزنم؟ روشهای بیشماری برای انجام این کار هست، اما تمام آنها یا به ابزارهای در دسترس محدود میشوند، یا کُند هستند. ما چند نمونه را نشان خواهیم داد. بیایید اول با روش آهسته قابل حمل شروع کنیم و با این نمونه آن را انجام بدهیم: # POSIX while IFS= read -r line; do...
-
tee کردن stdout اسکریپت در فایل log
شنبه 27 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۶ میخواهم از داخل اسکریپت stdout را به یک فایل ثبت وقایع tee نمایم. و همچنین شاید stderr را. این مورد نیازمند برخی دستکاریهای مهارتآمیز توصیفگرفایل ، و یکی از موارد لوله دارای نام یا جایگزینی پردازشِ Bash میباشد. ما میخواهیم بر ترکیب دستوری Bashتمرکز نماییم. اجازه بدهید با سادهترین حالت شروع...
-
چرا set -e مطابق انتظار عمل نمیکند
پنجشنبه 25 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۵ چرا set -e (یا set -o errexit یا trap ERR) آنچه را انتظار دارم انجام نمیدهد؟ دستور set -e کوششی برای افزودن تشخیص خطای خودکار به پوسته بود. هدف آن بود که موجب گردد هرگاه هر خطایی رخ داد، پوسته لغو بشود، بنابراین شما || exit 1 را...
-
چرا foo=bar echo "$foo" کار نمیکند
سهشنبه 23 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۴ چرا foo = bar echo " $ foo " رشته bar را چاپ نمیکند؟ این تله است، و باید به ترتیب دقیقی که، تفکیک کنندهBash هر مرحله را انجام میدهد، توجه شود. بسیاری اشخاص وقتی ابتدا ترکیب var=value command را کشف میکنند و پیمیبرند که چطور در طول اجرای فرمان به طور موقتی متغیر را تنظیم...
-
تعیین محدوده تاریخی ویرایش فایل
دوشنبه 22 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۳ چطور بررسی نمایم که فایل دریک ماه معین یا در یک محدوده تاریخی ویرایش شده است؟ انجام محاسبات مبتنی بر تاریخ در Bash دشوار است، زیرا Bash ساختار داخلی برای محاسبه با تاریخ یا دریافت فوق دادههایی مانند زمان ویرایش فایلها ندارد. برنامه stat(1) وجود دارد، اما حتی در میان سیستمعاملهای مختلف گنو...
-
محاسبه اختلاف بین دو تاریخ معین
یکشنبه 21 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۲ چگونه اختلاف بین دو تاریخ را به دست آورم؟ بهترین کار آنست که در سراسر کُد خود با نشانههای زمان (timestamps) کار کنید، و سپس برای خروجی، این نشانهها را به شکل قابل خواندن انسانی تبدیل نمایید. اگر شما با ورودی قابل خواندن انسانی سر و کار دارید، پس به چیزی که بتواند آنها را تجزیه کند نیاز خواهید...
-
توابع سودمند warn و die
شنبه 20 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۱ توابع سودمند همگانی(warn و die) (اگر شما در جستجوی گزینه پردازش بودهاید، پرسش و پاسخ شماره ۳۵ را ملاحظه کنید.) در مورد توابع ذیل بارها در #bash سؤال شده است، بنابراین امیدواریم آنها برایتان مفید باشد. ## # warn: چاپ میکند stderr پیغامی در # warn "format" ["arguments"...] :طرز استفاده #...
-
دستکاری رشتهها در Bash
چهارشنبه 17 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۱۰۰ در bash چگونه میتوانم رشتهها را دستکاری کنم؟ Bash میتواند با رشتهها عملیات انجام بدهد. عملیات رشتهای فراوان. این یک مقدمه برای دستکاریهای رشته در bash و شگردهای مربوطه میباشد. با پرسش بسط پارامتر همپوشانی دارد، اما اطلاعاتی که در اینجا ارائه شده است، یک حالت مبتدی پسندتری دارد(امیدواریم)....
-
جدیدترین یا قدیمیترین فایل در دایرکتوری
دوشنبه 15 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۹ چطور میتوانم جدیدترین(یا قدیمیترین) فایل یک شاخه را به دست آورم؟ این صفحه باید با پرسش و پاسخ شماره ۳ ادغام میشد. پاسخ ls -t | head -1 که فوراً به ذهن میرسد، اشتباه است، به علت آنکه تجزیه خروجی ls نا امن است، در عوض، باید حلقهای ایجاد نموده و نشانههای زمان را مقایسه کنید: #...
-
افزودن پشتیبانی محلی به اسکریپت
شنبه 13 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۸ چگونه پشتیبانی محلی را به اسکریپتهای bash خود اضافه کنید جستجو برای مثالهای چگونگی افزودن محلیسازی ساده به اسکریپتهای bash خودتان، و چگونگی انجام آزمایش؟ احتمالاً آنچه شما میخواهید این است.... فهرست چگونه پشتیبانی محلی را به اسکریپتهای bash خود اضافه کنید نخست، چند متغیر که باید آنها را درک...
-
تعیین لینکهای خراب
چهارشنبه 10 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۷ چطور میتوانم تعیین کنم که یک پیوند نمادین آیا منفصل (شکسته) است؟ مستندات در این مورد مبهم است، اما میتوانید به نوعی با دستورات داخلی پوسته آن را انجام دهید: # Bash if [[ ( -L $name ) && ( ! -e $name ) ]] then echo "$name is a dangling symlink" fi صفحه man در Bash به شما میگوید که " -L...
-
پرسش و پاسخ شماره ۹۶
دوشنبه 8 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۶ ssh کرانههای کلمات مرا میخورد! نمیتوانم ssh remotehost make CFLAGS = " -g -O " را انجام بدهم! ssh رفتار فرمان راه دور پوسته یونیکس ( rsh یا remsh ) شامل این باگ، را شبیهسازی میکند. چند روش برای عبور موقت موجود است، و به طور دقیق وابسته آنست که شما چه چیزی لازم دارید. نخست، اینجا...
-
پرسش و پاسخ شماره ۹۵
شنبه 6 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۵ میخواهم لیست خیلی بلند شناسهها را دریافت کنم. چطور میتوانم یک لیست بزرگ قابل توجه را پردازش نمایم؟ ابتدا، بیایید برخی موضوعات زمینهای را بازبینی کنیم. موقعی که یک پردازش میخواهد پردازش دیگری را اجرا کند، یک فرزند fork() (منشعب) میکند، و پردازش فرزند یکی از فراخوانهای سیستمی...
-
اخطار در مورد کمبود فضای دیسک
چهارشنبه 3 مهرماه سال 1392 16:52
پرسش و پاسخ شماره ۹۴ میخواهم وقتی دیسک پُر میشود یک هشدار دریافت کنم(با تجزیه خروجی df ). متأسفانه، تجزیه خروجی فرمان df واقعاً معتبرترین روش تعیین پر شدن کامل دیسک در اکثر سیستمعاملها میباشد. به هر حال، لطفاً توجه نمایید که این کم ضررترین پاسخ است، نه بهترین جواب. تجزیه خروجی هر ابزار گزارش خط فرمانی هرگز...
-
تنظیم عنوان ترمینال
دوشنبه 1 مهرماه سال 1392 16:03
پرسش و پاسخ شماره ۹۳ چطور میتوانم محتویات نوار عنوان ترمینال خود را تنظیم نمایم؟ اگر ترمینالی دارید که رشتههای escape سازگار با xterm را میشناسد، و شما میخواهید فقط یکبار عنوان آن را تنظیم کنید، میتوانید از چنین تابعی استفاده کنید: settitle() { printf '\e]2;%s\a' "$*"; } زیرنویس 1 اگر میخواهید نوار عنوان هر بار...
-
نوشتن اسکریپت CGI !!
شنبه 30 شهریورماه سال 1392 16:15
پرسش و پاسخ شماره ۹۲ چگونه یک اسکریپت CGI بنویسم که پارامترها را بپذیرد؟ همواره شرایطی ماورای کنترل ما وجود دارد، که ما را به سمت انجام مواردی میراند، که اگر به عهده خودمان بود هرگز انجام آنها را انتخاب نمیکردیم. این مدخل FAQ یکی از آن موقعیتها را تشریح میکند. یک برنامه CGI میتواند با پارامترهایی که توسط مرورگر...
-
متغیر COLUMNS و LINES در اسکریپت
پنجشنبه 28 شهریورماه سال 1392 16:03
پرسش و پاسخ شماره ۹۱ من تلاش میکنم تعداد سطر و ستون ترمینال خود را دریافت کنم، اما متغیرهای COLUMNS و LINES همیشه تهی هستند COLUMNS و LINES در وضعیت محاورهای توسط BASH تنظیم میشوند، آنها به طور پیشفرض در یک اسکریپت در دسترس نیستند. در اکثر سیستمها خودتان میتوانید با ترمینال پرس و جو کنید: unsup() { echo "Your...