آنچه در این مقاله میخوانید
اشتباهات رایج در Bash و راهکار هایی برای بهبود آن
۹ مرداد ۱۴۰۴
Bash یکی از ابزارهای قدرتمند در توسعه نرمافزار است، اما استفاده نادرست از آن میتواند به مشکلاتی منجر شود که در ابتدا چندان قابل مشاهده نیستند. بسیاری از توسعهدهندگان به عادات نادرستی در Bash دچار میشوند که ظاهرا بیضرر به نظر میرسند، اما ممکن است بعدها دردسرساز شوند. در این مطلب همراه لیارا باشید تا نحوه اصلاح آنها را به شما آموزش دهیم.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی ابری
آنچه در ادامه خواهید خواند:
- اشتباه رایج در استفاده از Bash
- سوالات متداول
- جمع بندی

اشتباه رایج در استفاده از Bash
تمامی این اشتباهات را به خوبی مطالعه کنید و آن را در پروژه های خود به کار نبرید.
استفاده از ls | grep به جای shell globbing
فرض کنید شما علاقه مند به کتاب هستید و در یک فروشگاه بزرگ کتاب، در میان تعداد زیادی از آن ها به دنبال یک کتاب خاص میگردید. به جای آنکه با سادگی بخش مورد نظر تان را پیدا کنید، شروع به چرخیدن میان قفسه ها میکنید و هر بار یک کتاب را از قفسه خود بیرون میآوردید تا ببیندی که این کتاب آیا همان کتاب مورد نظر شما است یا خیر. این دقیقا شبیه به استفاده از دستور ls | grep
برای فیلتر کردن فایلها در Bash است. در حالی که این روش میتواند کار کند، اما استفاده از از shell globbing
مثل این میماند که مستقیماً به قفسهی کتابهای خود بروید و بدون زحمت، دقیقاً کتاب مورد نظر را پیدا کنید. در این حالت شما با استفاده از دستورات *
یا ?
به سرعت به نتیجه میرسید و نه تنها زمان خود را صرفهجویی میکنید، بلکه کد شما هم سریعتر اجرا خواهد شد.
ls | grep '\.txt$'
به چه دلیل این کار اشتباه است:
این روش یک زیرفرآیند اضافی (ls
) ایجاد میکند و خروجی آن را به یک زیرفرآیند دیگر (grep
) میفرستد.
این کار باعث کندتر شدن اجرا میشود و در برخورد با نام فایلهای خاص (مثلاً فایلهایی که شامل کاراکترهای ویژه یا خطوط جدید هستند) به مشکل میخورد.
همچنین فرض را بر این میگذارد که نام فایلها فاقد فاصله یا کاراکترهای خاص هستند، که این فرض بسیار شکننده و غیرقابل اعتماد است.
بهترین روش برای استفاده از آن:
ls *.txt
بهتر است که از الگوی globbing در شل (*.txt
) استفاده کنید.
در این روش دیگر نیازی به pipe یا اجرای فرآیند های اضافی را نخواهید داشت..
نتیجه کاری شما سریع تر و قابل پیش بینی تر به خصوص در هنگام کار با تعداد زیاد فایل ارائه داده میشود.
استفادهی بدون نیاز از cat
cat file.txt | grep 'error'
به چه دلیل این کار اشتباه است:
در این دستور، یک فرآیند اضافی (cat)
بدون دلیل اجرا میشود.
و همین امر میتواند خوانایی دستور را کاهش پیدا دهد و با اصول رایج در Bash مطابقت نداشته باشد.
در برخی موارد خاص، cat
ممکن است ورودی را با تأخیر (buffer) پردازش کند و باعث رفتار غیرمنتظره در زنجیرهی دستورات شود.
روش بهتری که میتوانید برای آن استفاده کنید.
grep 'error' file.txt
استفادهی مستقیم از grep file.txt
سریعتر و سادهتر است.
هر چه استفاده از pipe کمتر باشد، احتمال خطا هم کمتر خواهد بود.
همچنین، هدف دستور واضحتر است: در حال جستوجو در یک فایل هستید، نه تبدیل جریان داده.
جلوگیری از 10 اشتباه رایج برنامه نویسان در استفاده از API
10 اشتباه رایج برنامه نویسان در استفاده از API
نقل قول نگذاشتن دور متغیر ها
rm $file
به چه دلیل این کار اشتباه است:
اگر مقدار $file
برابر با My File.txt
باشد، دستور به صورت rm My File.txt
اجرا میشود به این معنی است که دو آرگومان مختلف از آن انتخاب میشود.
این موضوع ممکن است باعث حذف ناخواسته فایلها یا حتی خراب شدن اسکریپت شود.
همچنین در برابر globbing (مثل *
یا ?
) و شکستن کلمات آسیبپذیر است.
بهترین روش برای استفاده از آن:
rm "$file"
نقل قول گذاشتن باعث حفظ یکپارچگی نام فایل
از فایلها در برابر فاصله، globbing و تزریق (injection) محافظت میکند.
اسکریپتها را امنتر و قابل اطمینانتر میکند.
جمع بندی
در کار با Bash، رعایت چند نکتهی ساده میتواند از بروز مشکلات جدی در آینده جلوگیری کند. استفادهی نادرست از دستوراتی مانند ls | grep
یا اجرای بیدلیل cat
نهتنها سرعت اجرای اسکریپت را کاهش میدهد، بلکه احتمال بروز خطا را نیز افزایش میدهد. با رعایت این اصول ساده، اسکریپتهای Bash شما سریعتر، امنتر و قابلاعتمادتر خواهند بود و حتی در پروژههای بزرگ نیز بدون دردسر اجرا میشوند.
مدیریت چالشهای توسعه؛ مهارت فنی یا درک عمیق؟
چالشهای توسعه