exec - فراخوانی subprocess (s)
خلاصه داستان
exec سوئیچ ها آرگومان آرشیو ...
شرح
این دستور، استدلال هایش را به عنوان مشخصه یک یا چند فرآیند زیر اجرا می کند. استدلال ها به شکل یک خط لوله استاندارد پوشیده می شود که هر کدام از آنها یک کلمه از یک دستور می شود و هر فرمان متمایز یک فرایند زیر می شود.
اگر استدلال اولیه برای exec شروع شود، پس آنها به عنوان کلید های خط فرمان به کار می روند و جزء مشخصات خط لوله نیستند. سوئیچ های زیر در حال حاضر پشتیبانی می شوند:
-keepnewline
خطوط خطی انتهایی در خروجی خط لوله ذخیره می شود. به طور معمول خط جدید خطی حذف خواهد شد.
-
انتهای سوئیچ ها را نشان می دهد. استدلال زیر این یکی به عنوان اولین آرژان درمان خواهد شد، حتی اگر با یک شروع شود.
اگر یک arg (یا pair of arg ) دارای یکی از اشکال شرح داده شده در زیر باشد، توسط exec برای کنترل جریان ورودی و خروجی در زیر پروسس ها استفاده می شود. چنین استدلالی به پروسس (es) منتقل نخواهد شد. در اشکال مانند `` fileName '' fileName ممکن است در یک استدلال جداگانه از `` <'' یا در همان بحث با هیچ فضایی درگیر (یعنی `` < fileName '') باشد.
|
دستورات متمایز در خط لوله را جدا می کند. خروجی استاندارد فرمان قبلی به ورودی استاندارد دستور بعدی وارد می شود.
| &
دستورات متمایز در خط لوله را جدا می کند. هر دو خروجی استاندارد و خطای استاندارد دستور قبلی به ورودی استاندارد دستور بعدی وارد می شوند. این فرم هدایت هدایت فرمهایی مانند 2> و> & را لغو می کند.
< fileName
فایل با نام fileName باز می شود و به عنوان ورودی استاندارد برای اولین فرمان در خط لوله استفاده می شود.
<@ fileId
FileId باید شناسه یک فایل باز باشد، مانند مقدار بازگشتی از یک تماس قبلی برای باز کردن . این به عنوان ورودی استاندارد برای اولین فرمان در خط لوله استفاده می شود. FileId باید برای خواندن باز شود.
<< ارزش
ارزش به عنوان ورودی استاندارد به فرمان اول منتقل می شود.
> filename
خروجی استاندارد از آخرین دستور به فایل با نام fileName هدایت می شود و محتوای قبلی آن را بازنویسی می کند.
2> fileName
خطای استاندارد از تمام دستورات در خط لوله به فایل با نام fileName ، رونویسی مطالب قبلی آن، هدایت می شود.
& filename
هر دو خروجی استاندارد از آخرین فرمان و خطای استاندارد از تمام دستورات به فایل با نام fileName هدایت می شوند، و محتوای قبلی آن را بازنویسی می کند.
>> fileName
خروجی استاندارد از آخرین دستور به فایل با نام fileName هدایت می شود، به آن افزوده می شود تا آن را بازنویسی کند.
2 >> fileName
خطای استاندارد از تمام دستورات در خط لوله به فایل با نام fileName هدایت می شود، به آن افزوده می شود تا آن را بازنویسی کند.
>> & filename
هر دو خروجی استاندارد از آخرین فرمان و خطای استاندارد از تمام دستورات به فایل با نام fileName هدایت می شوند، به آن افزوده می شود تا آن را بازنویسی کند.
> @ fileId
FileId باید شناسه یک فایل باز باشد، مانند مقدار بازگشتی از یک تماس قبلی برای باز کردن . خروجی استاندارد از آخرین دستور به فایل fileId هدایت می شود، که باید برای نوشتن باز شود.
2 @ fileId
FileId باید شناسه یک فایل باز باشد، مانند مقدار بازگشتی از یک تماس قبلی برای باز کردن . خطای استاندارد از تمام دستورات در خط لوله به فایل fileId هدایت می شود. فایل باید برای نوشتن باز شود.
& @ fileId
FileId باید شناسه یک فایل باز باشد، مانند مقدار بازگشتی از یک تماس قبلی برای باز کردن . هر دو خروجی استاندارد از آخرین فرمان و خطای استاندارد از تمام دستورات به فایل fileId هدایت می شوند. فایل باید برای نوشتن باز شود.
اگر خروجی استاندارد هدایت نشده باشد، سپس دستور exec خروجی استاندارد از آخرین دستور را در خط لوله باز می کند. اگر هر کدام از دستورات در خط لوله غیرمعمول خارج شوند یا کشته یا معلق شوند، exec یک خطا را برمی گرداند و پیام خطا شامل خروجی خط لوله است که پیغام خطا را نشان می دهد که عبارت از انتساب غیر عادی است؛ متغیر errorCode حاوی اطلاعات اضافی در مورد آخرین ختم غیرمعمول مواجه خواهد شد. اگر هر کدام از دستورات به فایل خطای استاندارد خود می نویسد و این خطای استاندارد هدایت نمی شود، exec یک خطا را برمی گرداند؛ پیام خطا شامل خروجی استاندارد خط لوله می شود، به دنبال پیام های مربوط به پایان ترم های غیر عادی (در صورت وجود)، و پس از خروجی استاندارد خطا.
اگر آخرین کاراکتر نتیجه یا پیغام خطا یک خط جدید است پس این کاراکتر به طور معمول از نتیجه یا پیغام خطا حذف می شود. این سازگاری با سایر ارزش های بازگشت Tcl است که به طور معمول با خطوط جدید پایان نمی یابد. با این حال، اگر -keepnewline مشخص شده باشد، خط جدید انتهایی حفظ می شود.
اگر ورودی استاندارد با `` <'' یا `` << '' یا `` <@ '' هدایت نمی شود، ورودی استاندارد برای اولین دستور در خط لوله از ورودی استاندارد فعلی برنامه گرفته شده است.
اگر آخرین آرگومان `` و '' باشد، خط لوله در پس زمینه اعدام خواهد شد. در این مورد، دستور exec یک لیست را برگرداند که عناصر آن شناسایی روند برای تمام زیر پروسه ها در خط لوله هستند. خروجی استاندارد از آخرین فرمان در خط لوله به خروجی استاندارد برنامه کاربردی منتقل می شود اگر آن را هدایت نکرده و خروجی خطا از تمام دستورات در خط لوله به فایل خطای استاندارد برنامه کاربردی، مگر اینکه هدایت شود.
اولین کلمه در هر فرمان به عنوان نام فرمان گرفته می شود. جایگزینی tilde بر روی آن انجام می شود، و اگر نتیجه حاوی هیچ قطره ای نباشد، سپس دایرکتوری ها در متغیر محیط PATH برای اجرایی با نام داده شده جستجو می شوند. اگر نام شامل یک اسلش باشد، باید آن را به اجرایی قابل دسترسی از دایرکتوری فعلی رجوع کنید. گسترش `` glob '' یا جایگزینی دیگر پوسته مانند بر روی استدلال هایی برای دستورات انجام نمی شود.
مشکلات حمل و نقل
ویندوز (همه نسخه ها)
خواندن یا نوشتن به سوکت، با استفاده از علامت `` @ fileId '' کار نمی کند. هنگام خواندن از یک سوکت، یک برنامه DOS 16 بیتی قطع خواهد شد و یک برنامه 32 بیتی بلافاصله پس از پایان فایل بازگشت خواهد کرد. هنگامی که هر نوع نرم افزار به سوکت می نویسد، به جای آن به کنسول فرستاده می شود، اگر کسی وجود داشته باشد یا از بین رفته باشد.
ویجت متن کنسول Tk قابلیت های استاندارد استاندارد IO را ارائه نمی دهد. در زیر Tk، هنگام هدایت از ورودی استاندارد، تمام برنامه های کاربردی پایان فوری را مشاهده می کنند؛ اطلاعات هدایت شده به خروجی استاندارد یا خطای استاندارد حذف خواهند شد.
در هر دو صورت به جلو یا عقب به عنوان جداکننده مسیر برای استدلال به دستورات Tcl پذیرفته می شوند. هنگام اجرای یک برنامه، نام مسیر مشخص شده برای برنامه ممکن است همچنین به عنوان جداساز مسیر مورد توجه قرار گیرد. با این حال، به یاد داشته باشید که اکثر برنامه های ویندوز، فقط به عنوان گزینه های اختیاری و فقط بر روی مسیرها با هم برخورد می کنند. هر استدلالی برای یک برنامه که نام مسیر را با زاویه های جلو مشخص می کند، به صورت خودکار برای استفاده از کاراکتر backslash ایجاد نمی شود. اگر یک استدلال حاوی رویارویی های پیش رو به عنوان جدا کننده مسیر باشد، بسته به برنامه می تواند یا ممکن باشد به عنوان یک نام مسیر شناخته شود.
علاوه بر این، هنگام فراخوانی یک برنامه DOS 16 بیتی یا ویندوز 3.X، تمام نامهای مسیر باید از مسیر کوتاه و متناقض (از جمله `` applba ~ 1.def '' به جای `` applbakery.default '' استفاده کنند) )
دو یا چند ردیف جلو یا عقب در یک ردیف در یک مسیر به مسیر شبکه اشاره دارد. برای مثال، یک پیوند ساده دایرکتوری ریشه c: / با یک زیرپوشه / windows / system c: // windows / system را انجام می دهد (که دو بار در کنار هم قرار می گیرند)، که اشاره به نقطه اتصال به سیستم را بر روی دستگاه به نام windows (و c: / نادیده گرفته می شود) و معادل c: / windows / system معادل نیست، که دایرکتوری را در رایانه فعلی توصیف می کند. دستور پیوست فایل باید برای ترکیب اجزای مسیر استفاده شود.
ویندوز NT
هنگام اجرای یک برنامه، exec اولین بار برای نام به عنوان مشخص شده جستجو می کند. سپس، به ترتیب، .com ، .exe و .bat به انتهای نام مشخص شده اضافه می شوند و برای نام طولانی جستجو می کنند. اگر یک نام دایرکتوری به عنوان بخشی از نام برنامه مشخص نشده باشد، دایرکتوری های زیر به صورت خودکار در هنگام تلاش برای قرار دادن برنامه جستجو می شوند:
دایرکتوری که از آن اجرایی Tcl بارگذاری شد.
دایرکتوری فعلی
ویندوز NT 32 بیتی دایرکتوری سیستم.
ویندوز NT 16 بیتی دایرکتوری سیستم.
دایرکتوری خانه Windows NT.
فهرست های موجود در مسیر
برای اجرای دستورات shell builtin مانند dir و کپی ، فراخوانی باید `` cmd.exe / c '' را به فرمان مورد نظر اضافه کند.
ویندوز 95
هنگام اجرای یک برنامه، exec اولین بار برای نام به عنوان مشخص شده جستجو می کند. سپس، به ترتیب، .com ، .exe و .bat به انتهای نام مشخص شده اضافه می شوند و برای نام طولانی جستجو می کنند. اگر یک نام دایرکتوری به عنوان بخشی از نام برنامه مشخص نشده باشد، دایرکتوری های زیر به صورت خودکار در هنگام تلاش برای قرار دادن برنامه جستجو می شوند:
دایرکتوری که از آن اجرایی Tcl بارگذاری شد.
دایرکتوری فعلی
دایرکتوری سیستم ویندوز 95.
دایرکتوری خانگی Windows 95.
فهرست های موجود در مسیر
برای اجرای دستورات shell shell مانند dir و copy ، caller باید دستور command / c را به فرمان مورد نظر اضافه کند.
هنگامی که یک برنامه DOS 16 بیتی ورودی استاندارد از یک کنسول را خوانده است و پس از آن تمام می شود، همه پس از آن برنامه های 16 بیتی DOS اجرا می شوند که ورودی استاندارد را قبلا بسته کرده اند. برنامه های 32 بیتی این مشکل را ندارند و به درستی اجرا خواهند شد، حتی پس از اینکه یک برنامه DOS 16 بیتی فکر می کند که ورودی استاندارد بسته است. هیچ راه حل معقولی برای این اشکال در این زمان وجود ندارد.
تغییر مسیر بین دستگاه NUL و یک برنامه 16 بیتی همیشه کار نمی کند. هنگام تغییر مسیر از NUL: بعضی از برنامه ها ممکن است آویزان شوند، دیگران یک جریان بی نهایت از بایت های `` 0x01 '' دریافت خواهند کرد و بعضی دیگر به درستی فایل فوری پایان می دهند؛ رفتار به نظر می رسد بستگی به چیزی که در خود نرم افزار وارد شده است. وقتی هدایت بیش از 4K یا بیشتر به NUL: برخی برنامه ها قطع می شوند. مشکلات بالا با برنامه های 32 بیتی اتفاق نمی افتد.
تمام برنامه های DOS 16 بیتی همزمان اجرا می شوند. تمام ورودی های استاندارد از یک لوله به یک برنامه DOS 16 بیتی به یک فایل موقت جمع آوری می شود؛ انتهای دیگر لوله قبل از اجرای برنامه DOS 16 بیتی باید بسته شود. تمام خروجی یا خطای استاندارد از یک برنامه DOS 16 بیتی به یک لوله به فایلهای موقت جمع آوری می شود. قبل از اینکه پرونده های موقت به مرحله بعدی خط لوله هدایت شوند، برنامه باید خاتمه یابد. این به خاطر یک راه حل برای یک اشکال ویندوز 95 در پیاده سازی لوله ها است و این که چگونه استاندارد ویندوز 95 DOS پوسته خود لوله را مدیریت می کند.
برنامه های خاصی مانند command.com نباید به طور تعاملی اجرا شوند. برنامه های کاربردی که به طور مستقیم به پنجره کنسول دسترسی پیدا می کنند، به جای خواندن از ورودی استاندارد و نوشتن به خروجی استاندارد آنها ممکن است نتوانند، Tcl را آویزان کنند، یا حتی سیستم را ببندند، در صورتی که پنجره کنسول خصوصی خود برای آنها در دسترس نباشد.
مکینتاش
دستور exec اجرا نمی شود و تحت Macintosh وجود ندارد.
یونیکس
دستور exec به طور کامل کار می کند و همانطور که گفته شد عمل می کند.
همچنین مشاهده کنید
خطا (n)، باز (n)
کلید واژه ها
اجرا، خط لوله، تغییر مسیر، زیر پروسه
مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.