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

کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: lomion در 30 آذر 1389، 10:55 ق‌ظ

عنوان: شبه راهنمای اجرای یک نمونه ‌ای برنامه ها (Single instance)
ارسال شده توسط: lomion در 30 آذر 1389، 10:55 ق‌ظ
بالاخره بعد از مدتها از اون کتاب مجهول الهویه گنو/لینوکسی (!) یک چند برگی پیدا شد که تقدیم می گردد!
--

(http://dl.dropbox.com/u/3122779/sh3.png)

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

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

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

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

 - -  
بعضی از برنامه‌ها یه مقداری همچین خود شیرین هستن و هر چند بار که اجراشون می کنیم، انگار نه انگار که اجرا شدن و با یک اطمینان خاطر کاذب  :biggrin:، مجدداً اجرا میشن!   ::) همونطوی که نقل شد، این یه موضوع کاملاً (!) تاریخی هست و شاید برای شما هم سؤال پیش اومده که چه کاری باید کرد که از یک برنامه فقط و فقط یه دونه اجرا بشه و اگه دوباره اجرا کردید، همون پنجره باز رو بیاره. منبع این شبه راهنما از این پست (http://ubuntuforums.org/showpost.php?p=1142703&postcount=10) هست که ظاهراً (!) ترجمه و تفسیری برای همون روایت هست!  :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 قرار بدید.) و اسکریپت رو به اسم برنامه اجرایی داخل اون پوشه قرار بدید. در این صورت فقط برای اون کاربر این اسم استفاده میشه.

پ.ن. حتماً یادتون باشه که اسکریپت شما باید اجرایی باشه! ;)
عنوان: پاسخ به: شبه راهنمای اجرای یک نمونه ‌ای برنامه ها (Single instance)
ارسال شده توسط: Freeman در 30 آذر 1389، 03:35 ب‌ظ
1+ به راهنما و نحوه نگارشش  :)
عنوان: پاسخ به: شبه راهنمای اجرای یک نمونه ‌ای برنامه ها (Single instance)
ارسال شده توسط: mrmrn در 30 آذر 1389، 04:24 ب‌ظ
خیلی خوشحال شدم که بعد 2سال شما شروع کردی شبه راهنماهات رو!
ممنون.
امیدوارم ادامه داشته باشه علی آقا!
عنوان: پاسخ به: شبه راهنمای اجرای یک نمونه ‌ای برنامه ها (Single instance)
ارسال شده توسط: lomion در 30 آذر 1389، 06:08 ب‌ظ
بخش تصویریش رو ممنون هستم از narcissus که لطف کردن :)