انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: شبه راهنمای اجرای یک نمونه ‌ای برنامه ها (Single instance)  (دفعات بازدید: 3089 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

lomion

  • مهمان
بالاخره بعد از مدتها از اون کتاب مجهول الهویه گنو/لینوکسی (!) یک چند برگی پیدا شد که تقدیم می گردد!
--


و روزی یکی از یاران پرسید، ای پیر مسالهٌ! گفت بپرس! گفت ای پیر برنامه‌هایی بباشندی که من خواستمی فقط یک نمونه زیشان اجرا همی شود و نه بیشتر! و لیک به وقاحت تمام، مجدداً اجرا همی شوند و روح و جان سیستم بیازارند!

پیر در فکر شد و به بداهه ای پاسخش بداد:

بگفتا که راهش بود بس زیاد / که سهمت ز جمعش همی یک بباد!
به shell بایدش چون نویسی کمی / بهVim ـَت و nano و ed چون همی
کلیدش گرفتن ز window چو نام / و هنگام اجرا کنی او  که رام
و  گردد به وم کنترلش (wmctrl) چون مهار! / که اجرای دیگر نیاید کنار!
و آخر مسیری برایش بساز / دخالت به اجرا نگردد نیاز!

و یاران پس از دمی اندیشه نعره زندندی و شلها باز کردندی که اسکریپتش را بنویسندی و حال برندی!

 - -  
بعضی از برنامه‌ها یه مقداری همچین خود شیرین هستن و هر چند بار که اجراشون می کنیم، انگار نه انگار که اجرا شدن و با یک اطمینان خاطر کاذب  :biggrin:، مجدداً اجرا میشن!   ::) همونطوی که نقل شد، این یه موضوع کاملاً (!) تاریخی هست و شاید برای شما هم سؤال پیش اومده که چه کاری باید کرد که از یک برنامه فقط و فقط یه دونه اجرا بشه و اگه دوباره اجرا کردید، همون پنجره باز رو بیاره. منبع این شبه راهنما از این پست هست که ظاهراً (!) ترجمه و تفسیری برای همون روایت هست!  :biggrin:
 
اسکریپت مورد استفاده به این صورت هست (که عمومی شده اش اینجاست). این اسکریپت از برنامه wmctrl استفاده می کنه که اگه نصب نیست، اول نصبش کنید:

#! /bin/bash

WINTITLE="TITLE"            # Some string in the name of the program
PROGNAME="prg-name"    # This is the name of the binary

# Use wmctrl to list all windows, count how many contain WINTITLE,
# and test if that count is non-zero:

if [ `wmctrl -l | grep -c "$WINTITLE"` != 0 ]  
then
        wmctrl -a "$WINTITLE"       # If it exists, bring the window to front
else
        $PROGNAME &                  # Otherwise, just launch it
fi
exit 0

به جای TITLE باید عبارتی قرار بگیره که توی اسم اون برنامه همیشه هست یا مد نظر شماست مثلاً عبارت Mozilla Firefox توی پنجره فایرفاکس معمولاً هست. پس با این عبارت میشه اون رو پیدا کرد. به جای prg-name اسم برنامه اجرایی رو باید قرار داد که توضیح ادامه می تونه برای انتخاب کمک کنه:

ساده ترینش اینه که اسم برنامه اصلی رو تغییر بدید. مثلاً firefox رو به my-firefox تغییر نام بدین. و به جای prg-name اسم my-firefox رو قرار بدید که به جای برنامه اجرایی اصلی استفاده بشه. خوبیش در سادگیش هست. بدیش آینه که اگه بروز رسانی خاصی انجام بشه یا نامی جابجا بشه ممکنه مشکل ایجاد کنه.

راه دیگه این هست که از bin در home کاربر استفاده بشه.(اگه نیست اون رو بسازید و در مسیر PATH قرار بدید.) و اسکریپت رو به اسم برنامه اجرایی داخل اون پوشه قرار بدید. در این صورت فقط برای اون کاربر این اسم استفاده میشه.

پ.ن. حتماً یادتون باشه که اسکریپت شما باید اجرایی باشه! ;)
« آخرین ویرایش: 30 آذر 1389، 04:47 ب‌ظ توسط narcissus »

آفلاین Freeman

  • High Hero Member
  • *
  • ارسال: 2310
    • KDE Software Compilation
1+ به راهنما و نحوه نگارشش  :)

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
خیلی خوشحال شدم که بعد 2سال شما شروع کردی شبه راهنماهات رو!
ممنون.
امیدوارم ادامه داشته باشه علی آقا!
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

lomion

  • مهمان
بخش تصویریش رو ممنون هستم از narcissus که لطف کردن :)