تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آنچه در این مقاله می‌خوانید

اشتباهات رایج در 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 شما سریع‌تر، امن‌تر و قابل‌اعتمادتر خواهند بود و حتی در پروژه‌های بزرگ نیز بدون دردسر اجرا می‌شوند.

مدیریت چالش‌های توسعه؛ مهارت فنی یا درک عمیق؟
چالش‌های توسعه

به اشتراک بگذارید

برچسب‌ها: