دانلوداسکریپت اصلی
شرح
یکی از تکنیک های رایج این است که یک اسکریپت در صورتی که تشخیص دهد که اسکریپت اصلی است، خودآزمایی انجام دهد. رویکردهای ساده لوحانه فقط اسکریپت اطلاعات را با argv0$ مقایسه می کنند. یک رویکرد قویتر که معمولاً با pkg_mkIndex کار میکند، فقط به دنباله فایل این دو مقدار نگاه میکند. قوی ترین رویکرد این دو مقدار را به طور کامل عادی می کند، از جمله آخرین مؤلفه، که یک نرمال سازی فایل ساده حل نمی شود.
کامل ترین رویکرد:
… در انتهای هر مسیر تضمین می کند که عادی سازی فایل مسیر را به طور کامل حل می کند. به طور معمول، آخرین مؤلفه حل نمی شود (برای جزئیات به مستندات مراجعه کنید).
بررسی واجد شرایط فضای نام تضمین می کند که اسکریپت تنها زمانی به عنوان اسکریپت اصلی در نظر گرفته می شود که فضای نام فعلی فضای نام جهانی باشد. بدون این بررسی، اگر یک اسکریپت برای خواندن خود از اسکریپت اطلاعات استفاده کند، میتواند برای بار دوم به اشتباه اسکریپت اصلی در نظر گرفته شود.
یک رویکرد رایج و نسبتاً قوی
PYK: در واقع، من پیشنهاد میکردم که چون فقط خود tclsh واقعاً میداند اسکریپت اصلی چیست، به عنوان مثال. اسکریپت اطلاعات منبع گیج نمی شود، زیرا باید اطلاعات اصلی را به عنوان جایگزینی برای همه اسکریپت های موجود در این صفحه ارائه دهد.
dbohdan 2014-10-11: به نظر می رسد که اگر یک اسکریپت از یک درایو شبکه در ویندوز اجرا شود $argv0Info(ino) == $scriptInfo(ino) نگه ندارد.
PYK 2014-10-11: من فقط با Tcl نسخه 8.6.2 تحت ویندوز XP امتحان کردم و مشکلی را تشخیص ندادم. می توانی جزئیات بیشتری ارائه دهی؟
dbohdan 2014/10/12: حتما. هنگام آزمایش 2048.tcl در ویندوز XP VM در VirtualBox تحت لینوکس با این مشکل مواجه شدم. برای اجرای راحتتر بازی، یک پوشه اشتراکگذاری شده را به یک حرف درایو شبکه (\\vboxsvr\2048-tcl برای درایو T:) نگاشتم، اما وقتی سعی کردم آن را اجرا کنم، بازی شروع نشد. با اشکال زدایی مشکل متوجه شدم که در mainScript $argv0Info(ino) و $scriptInfo(ino) مقادیر متفاوتی داشتند، به عنوان مثال، 60568 و 24584 یا -28664 و 24584. این برای ActiveTcl 8.5 و tcltk.6 tombert صادق بود. اگر نتوانستید آن را بازتولید کنید، مکانیسم پوشه مشترک VirtualBox به جای اجرا از درایو شبکه ممکن است مقصر باشد.
دیدگاهها
پاککردن فیلترهاهیچ دیدگاهی برای این محصول نوشته نشده است.