من یک انجمن Dev – DEV تنبل هستم
انتشار اصلی در: وبلاگ شغلی
آره! من یک توسعه دهنده تنبل هستم و آن را دوست دارم.
من را اشتباه نفهمید من نگفته ام که مولد نیستم، برعکس است، بگذارید خودم را توضیح دهم.
من از انجام این نوع کارهای تکراری به صورت روزانه متنفرم، من همیشه به دنبال چالش ها هستم، چیزی که واقعاً مغزم را به کار می اندازد و سپس با یافتن راه حل های خلاقانه بهترین ها را به دست می آورد.
به همین دلیل است که خودم را در مسیر خودکارسازی کارهای تکراری با اسکریپت سوق دادم.
اسکریپت ها به من کمک زیادی برای انجام کارهای تکراری و حتی افزایش بهره وری من کرده اند، زیرا نیازی نیست که نگران صرف زمان زیادی برای انجام همین کار باشم و روی آنچه ارزش دارد تمرکز کنم.
ممکن است شروع سخت باشد، اما اگر میخواهید تبدیل به یک برنامهنویس تنبل شوید، فقط اجازه دهید توصیههایی در مورد نکاتی به شما بدهم که باید هر زمان که فیلمنامه جدیدی مینویسید به خاطر داشته باشید.
نکات
- از یک زبان برنامه نویسی مشترک که توسط تیم شناخته شده است استفاده کنید
- آن را کوتاه، تمیز و قابل فهم نگه دارید
- همین الگو را در اسکریپت های خود دنبال کنید
- اسکریپت های خود را مستند کنید
هنگامی که کاری را شناسایی کردید که میتوانید برای آن یک اسکریپت ایجاد کنید، لطفاً در خودکارسازی آن، تیم خود و حتی شما عاشق آن شوید.
خب من ترجیح میدهم اسکریپتهایم را با استفاده از bash بنویسم، یادگیری آن سادهتر، آسانتر است و با تمام سیستمهای مبتنی بر یونیکس همراه است.
اگر تیم شما از جاوا اسکریپت استفاده می کند جاوا اسکریپت نیز می تواند یک گزینه باشد.
من شخصا اکثر اسکریپت هایم را در bash و برخی دیگر را با پایتون نوشته ام.
لطفاً سعی نکنید یک اسکریپت بنویسید تا همه چیز را بسازید، بهتر است چندین اسکریپت کوتاه و قابل نگهداری به خوبی مستند شده باشد تا یک دسته بزرگ کد که سعی در کنترل جهان دارد.
اگر این همان چیزی است که می خواهید، ممکن است به جای آن یک برنامه CLI کامل بنویسید. اگرچه من توصیه نمی کنم
به عنوان یک قانون سرانگشتی سعی کنید الگوها را روی اسکریپتهای خود نگه دارید، این امر نه تنها برای شما ایجاد یک اسکریپت جدید را آسان میکند، بلکه برای هم تیمیهایتان نیز درک نحوه عملکرد فیلمنامه را آسان میکند.
الگویی که من دوست دارم از آن پیروی کنم پارامترهای پرچم است که در آن شما آنها را به عنوان پرچم به اسکریپت منتقل می کنید، به عنوان مثال اگر می خواهید یک مسیر فایل خارجی را منتقل کنید، یک پرچم مانند اضافه کنید. -f
یا --file
اگر پرچم کامل را ترجیح می دهید
بهترین راه برای مستندسازی اسکریپتهای خود یک کد است که خود توضیح داده شده است، اما ما معمولاً فقط به یک مستند سریع در مورد نحوه استفاده از آن بدون نیاز به بررسی کد نیاز داریم، به همین دلیل است که من به شما توصیه میکنم همیشه یک راهنما اضافه کنید. -h|--help
فرمان
برای کسانی که به انتها میرسند، چند الگو به شما میدهم که میتوانید از آنها برای ایجاد اسکریپتهای خود استفاده کنید، و باور کنید این به من کمک زیادی کرده است، عملکردم را بهبود بخشیده و چندین کار را در پروژههایی که روی آنها کار کردهام تسریع کرده است.
و مطمئناً وقتی ابزارهایی را برای افزایش سرعت توسعه کارهای تکراری استرس زا که انجام داده ایم، می سازم، مشتریان من را خوشحال تر می کند.
قالب Bash
#!/usr/bin/env bash -e
PARAMS=""
COMMANDS_FLAGS="
Help:
In order to pass arguments use '--' after the command like: npm run script-name -- -f
-f|--file: Pass file path
-o|--output-file: Sets the output file’s name
-h|--help: Lists help options
"
# VARS
FILE=""
while (( "$#" )); do
case "$1" in
-f|--file)
FILE=$2
shift
;;
-h|--help)
echo "$COMMANDS_FLAGS"
exit 0
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
exit 1
;;
*) # preserve positional arguments
PARAMS="$PARAMS $1"
shift
;;
esac
done
# set positional arguments in their proper place
eval set -- "$PARAMS"
# execute your script
echo "Running script..."
if [ "$FILE" = "" ]; then
echo "File not found."
else
cat $FILE
fi
خوب اجازه دهید کد را تقسیم کنیم، ابتدا به یک متغیر برای ذخیره پارامترهای موقعیتی نیاز داریم $PARAMS
، اینها هستند که ترتیب آن مهم است
COMMANDS_FLAGS
اساساً مستندات ما است که در صورت تمایل نمایش داده می شود --help
پرچم ارسال شده است یا اگر پارامترهای تصویب شده حداقل نیاز را تامین نمی کند.
همیشه پرچمهای کوتاه و کامل را به اسکریپتهای خود ارائه دهید، باور کنید کاربران آن را دوست خواهند داشت.
سپس میخواهید تمام مقادیر پیشفرض را برای متغیرهایی که استفاده میکنید تعریف کنید، زیرا در مرحله بعد بیشتر جادوها اتفاق میافتد…
در اینجا ما پرچمهای خود را تجزیه میکنیم و مقادیر مناسب را بسته به کاری که باید انجام شود در متغیرهای خود ذخیره میکنیم، میتوانید هر تعداد پرچم را که میخواهید اضافه کنید.
فقط یک مورد جدید مانند:
-f|--flag)
FILE=$2
shift
;;
به یاد داشته باشید که ارزش پرچم برای پرچمهای غیر بولی در 2$ ذخیره میشود.
و دو شرط آخر را فراموش نکنید:
-*|--*=)
به این معنی است که وقتی یک پرچم معتبر نیست، خطا ایجاد می کند*)
به معنای به هم پیوستن پارامترهای موقعیتی است
while (( "$#" )); do
case "$1" in
-f|--file)
FILE=$2
shift
;;
-h|--help)
echo "$COMMANDS_FLAGS"
exit 0
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
exit 1
;;
*) # preserve positional arguments
PARAMS="$PARAMS $1"
shift
;;
esac
done
همچنین پس از تجزیه پرچمهای خود به یاد داشته باشید که پارامترهای موقعیتی را در جای خود قرار دهید با:eval set -- "$PARAMS"
و بس! اکنون میتوانید اجرای اسکریپت خود را بر اساس شرایط تعیین شده توسط پرچمهایی که کاربر پاس میدهد شروع کنید یا اگر کاربر پرچمهای انحصاری یکدیگر را پاس میکند، خطا ایجاد میکند، بستگی به این دارد که بعد از آن اسکریپت خود را چگونه تعریف کنید.
جایزه!
گاهی اوقات شما می خواهید به اسکریپت های خود لایو بیشتری اضافه کنید مانند نشان دادن یک پیام خطا به رنگ قرمز یا یک توصیه به رنگ زرد، در این موارد من به شما پیشنهاد می کنم رنگ های خود را تعریف کنید.
قرمز=$'\e[1;31m'
green=$'\e[1;32m'
yellow=$'\e[1;33m'
blue=$'\e[1;34m'
magenta=$'\e[1;35m'
cyan=$'\e[1;36m'
purple=$'\e[1;34m%-6s\e[m'
end=$'\e[0m'
The end
var is to define where to stop painting your text, and it’s used like:
printf '%s\n' "${red}Error! There's nothing to be updated!.${end}"
Well and if that’s not enough for you, you can also create helper functions to help you better build your script or even better to add some enhancements to your script like the power of logging the batch of commands to be run in case your script performs a sequence of commands.
That way the user will be able to see before running the script what is about to be executed, I’ve made that abstraction for you, so don’t worry just use it.
run_command() {
if [ "$TEST_OUTPUT" = true ]; سپس
اکو "|$$@"
دیگر
printf "%s\n" "${آبی}در حال اجرا -> $$@${پایان}"
ارزیابی "$@"
فی
}
این تابع همانطور که می توانید کد را بخوانید نیاز به یک متغیر دارد TEST_OUTPUT
، می توانید پرچم را هر چیزی که مایلید با حرف T بزرگ انجام داده باشم تعریف کنید -T|--test
و اساساً کاری که انجام می دهد این است که اگر درست باشد، فرمان در حال اجرا را تکرار کنید در غیر این صورت دستور را چاپ کنید و همچنین آن را اجرا کنید.
یک مثال استفاده ساده می تواند این باشد که اسکریپت شما بخواهد اجرا شود git status
برای بررسی اینکه آیا تغییری وجود دارد یا خیر، آن را با تابع helper اجرا کنید:run_command "git status"
توجه داشته باشید
با پایتون می توانید استفاده کنید argparse
اگر بیشتر از علاقه مندان به پایتون هستید، واقعاً پرچم های خود را به روشی فانتزی نسبت به bash تجزیه کنید
امیدوارم این بتواند به شما کمک کند تا بهره وری خود را بهبود بخشید و شما را به راه توسعه دهنده تنبل بودن راهنمایی کند 🤗 به زودی شما را می بینم…