Gnu Tips

وبلاگ شخصی وحید معانی

دو نقطه‌ی کوچک در ارتباط با Bash

Post URL QrCode

Post URL QrCode

سلام

در این پست فقط به مرور دو تا نکته‌ی کوچیک از Bash می‌پردازیم. همین :)

اوّلیش این هست که در مواقعی لازم داریم بدونیم آیا مقدار یک متغیر خالی (null) هست یا نه، برای مثال آیا دستوری که مقدارش رو منتقل کردیم به متغیر خروجی داشته یا نه! در این گونه مواقع که کم هم نیستن می‌شه از آپشن ‪-z‬ دستور if استفاده کرد. به این شکل:

در این اسکریپت اگر مقدار متغیر var_name خالی باشه متن «Yes, The variable is empty» چاپ می‌شه و در غیر این صورت هیچ خروجی نخواهیم داشت.

دوّمیش این هست که یه متنی داریم که می‌خوایم توی خروجی چاپ بشه، ولی چون خیلی طولانی هست در نظر داریم طول مشخصی از اون رو چاپ کنیم و مثلاً با گذاشتن کاراکتر «…» در انتهاش به کاربر بفهمونیم که متن ادامه داشته. برای این کار می‌تونیم از شکل کلی زیر استفاده کنیم:

در این دستور var متغیری هست که در نظر داریم طولش رو کاهش بدیم که دوباره مقدارش توی خودش ذخیره می‌شه. start شماره‌ی کاراکتری هست که در نظر داریم نمایش کاراکتر‌ها از اونجا شروع بشه، count تعداد کاراکتر‌هایی هست که در نظر داریم نمایش داده بشه و در نهایت other chars همون کاراکتر/کاراکتر‌هایی هستن که شاید دوست داشته باشیم به انتهای متن اضافه بشه. برای مثال به دستورات زیر توجه کنید:

 

تغییر ویرایشگر پیش‌فرض virsh

Post URL QrCodeویرایشگر های vi و vim از اون برنامه‌هایی هستن که نمی تونم باهاشون کنار بیام.
از بد حادثه ویرایشگر پیش‌فرض virsh هم vi هست :-|
قاعدتاً باید ویرایشگر پیش‌فرض ترجیحی کاربر رو از توی متغیر محلی EDITOR بخونه یا بشه اون رو به داخل برنامه پاس داد. حتی توی man خودش توصیه کرده اوّل از متغیر VISUAL استفاده بشه و اگر نشد از متغیر EDITOR. ولی من نتونستم، برای همین رفتم سراغ یه راه حل دیگه. این راه حل به این شکل هست که قبل از دستور virsh همون متغیر محلی رو تنظیم کنیم یعنی به شکل زیر:

این جواب می‌ده، ولی برای اینکه هر بار نوشتن این یه خورده برای ماها سخته و از طرفی راه‌حلی مثل استفاده از alias داریم می‌ریم سراغش یعنی یه alias به شکل زیر می‌نویسیم براش:

خب این خیلی بهتر شد، ولی هنوز یه جای کار می‌لنگه!! emacs به شکل گرافیکی اجرا خواهد شد!! خب اگه شما هم مثل من دوست ندارید می‌تونید از آپشن

استفاده کنید یعنی به شکل زیر

ولی یه خبر بد! این alias اجرا نمی‌شه! به خاطر همین آپشنی که زدیم!! برای حلش یه اسکریپت با محتویات

نوشته و اون رو در مسیری که درون متغیر محلی PATH وجود داشته باشه با اسم pemacs ذخیره می‌کنیم. البته یادمون باشه که بتونه اجرا بشه. %D

پاک کردن بسته‌های بی‌استفاده در توزیع‌های بر پایه دبیان

فرض کنید بسته‌ی A رو نصب کردید، این بسته‌ بسته‌ی ‌B رو به عنوان پیش‌نیاز لازم داشته و به همراه خودش نصب کرده. حالا اگر بسته‌ی B رو پاک کنیم مدیر بسته خودش بسته‌ی A رو هم پاک می‌کنه، ولی اگر بسته‌ی A رو پاک کنیم بسته‌ی B دست نخورده باقی می‌مونه ولی یه مدیر بسته‌ی خوب مثه apt خودش بسته‌های بی‌استفاده رو تشخیص می‌ده و می‌تونه با دستور

# apt-get autoremove

پاکشون کنه!

خوب تا اینجای کار خیلی خوبه امّا، مشکل زمانی پیش میاد که بخوایم بسته‌ی A رو purge کنیم (purge مشابه remove هست با این تفاوت که مدیر بسته سعی می‌کنه تا حد ممکن همه‌ی آثار بسته مثه فایل‌های کانفیگ، لاگ فایل‌ها و … رو هم پاک کنه و به شکل

# apt-get purge

به کار می‌ره.) در نتیجه بسته‌ی A کامل پاک می‌شه.

حالا اگر بخوایم بسته‌های پیش‌نیاز رو هم کامل پاک کنیم چی کار باید بکنیم؟ جواب اوّل اینه که ابتدا لیست بسته‌هایی که دیگه لازم نیستن رو پیدا کنیم و با دستور purge پاکشون کنیم ولی جواب دوّم و عاقلانه استفاده از آپشن purge به همراه دستور autoremove هست. این آپشن دقیقاً کار دستور purge رو انجام می‌ده و به اصطلاح می‌شه دستور purge رو معادل دستور زیر در نظر بگیریم:

# apt-get remove –purge پس این دستور رو می‌زنیم:
  # apt-get autoremove –purge

پی‌نوشت: این پست رو با اپ اندرویید وردپرس می‌زارم، خیلی از قابلیت‌هاش رو نمی‌بینم مثله تگ کدش و … طبیعیه که مشکلاتی داره و بر پایه‌ی قالبی که خودم دوست دارم نیست، شما هم به بزرکی خودتون ببخشید. :)

تفاوت آپشن‌های update و no-clobber دستور cp

تفاوت آپشن‌های update و no-clobber دستور cp

post Qr code

سلام

من ۳ ۴ تا پوشه دارم با حجم‌های چند ده گیگی، و وقتش رسیده که اونها رو منتقل کنم روی هارد اکسترنالم تا هارد لپ‌تاپ آزادتر باشه.

دیروز کپی‌شون کردم ولی یکی از پوشه‌ها تفاوت حجم یک گیگی رو نشون می‌ده! راحتتر اینه که فایل‌ها رو دوباره کنم امّا دستور cp به صورت پیش‌فرض فایل‌های موجود رو رونویسی می‌کنه حتی با usb3 هم نتیجه وقت‌گیره. پس بهتره به cp بگم فایل‌های موجود رو زیر سیبیلی رد کنه :)

امّا کدوم آپشن cp به درد من می‌خوره؟! update یا no-clobber؟

با آپشن no-clobber دستور cp فایل‌ها رو بررسی می‌کنه و اگر از قبل وجود داشتن از اون صرف نظر می‌کنه (جواب مشکل ما) ولی با آپشن update دستور cp فایل مبدأ رو با فایل مقصد مقایسه می‌کنه و اگر فایل مبدأ تغییری کرده باشه اون رو روی فایل مقصد کپی می‌‌کنه. در نتیجه آپشن no-clobber وجودیت فایل مقصد رو چک می‌کنه ولی آپشن update محتوای ۲تا فایل رو با هم مقایسه می‌کنه.

چون فایل‌های من از دیروز به این ور تغییری نکردن من از no-clobber استفاده می‌کنم :)