ביצוע תתי-תהליכים (sub)
תקציר
exec? מתגים ? arg ? arg … ?
תיאור
פקודה זו מטפלת בטיעוניה כמפרט של תת-תחזוקה אחת או יותר לביצוע. הטיעונים לובשים צורה של צינור פגז רגיל שבו כל אחד arg הופך להיות מילה אחת של פקודה, וכל פקודה מובחרת הופכת לתת-תהום.
אם הארגומנטים הראשונייםexec להתחיל עם- אז הם מטופלים כמו בוררי שורת הפקודה והם לא חלק מפרט צינור. המתגים הבאים נתמכים בשלב זה:
- קו ישר
שומר על קו חדש נגרר בפלט של צינור. בדרך כלל שורה חדשה נגרר יימחק.
--
מסמן את סוף המתגים. הטיעון הבא יטופל כראשון arg גם אם זה מתחיל עם-.
אם arg (או זוג arg 's) יש אחד הטפסים המתוארים להלן ואז הוא משמשexec כדי לשלוט על זרימת קלט ופלט בין subprocess (es). טיעונים כאלה לא יועברו לתת-התהליכים. בטפסים כגון "< שם קובץ '' שם קובץ יכול להיות בארגומנט נפרד מ- "<" "או באותו ארגומנט ללא רווח (כלומר," < שם קובץ '').
|
מפריד פקודות שונות בצינור. הפלט הסטנדרטי של הפקודה הקודמת יופץ לקלט הסטנדרטי של הפקודה הבאה.
|&
מפריד פקודות שונות בצינור. הן הפלט הסטנדרטי והן שגיאת התקן של הפקודה הקודמת יופנו לקלט הסטנדרטי של הפקודה הבאה. צורה זו של ניתוב מחדש עוקפת צורות כגון 2> ו->.
< שם קובץ
הקובץ בשם שם קובץ נפתחת ומשמשת כקלט הסטנדרטי עבור הפקודה הראשונה בצנרת.
<@ fileId
FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת אלפתוח. הוא משמש קלט רגיל עבור הפקודה הראשונה בצינור. FileId כנראה נפתחו לקריאה.
<< ערך
ערך מועבר לפקודה הראשונה כקלט הסטנדרטי שלה.
> שם קובץ
הפלט הסטנדרטי מהפקודה האחרונה מופנה מחדש לקובץ ששמו שם קובץ , תוך החלפת התוכן הקודם.
2> שם קובץ
שגיאת תקן מכל הפקודות בצינור מנותבת לקובץ ששמו שם קובץ , תוך החלפת התוכן הקודם.
>& שם קובץ
הן הפלט הסטנדרטי מהפקודה האחרונה והן משגיאה סטנדרטית מכל הפקודות מופנות מחדש לקובץ ששמו שם קובץ , תוך החלפת התוכן הקודם.
>> שם קובץ
הפלט הסטנדרטי מהפקודה האחרונה מופנה מחדש לקובץ ששמו שם קובץ , לצרף אותו במקום להחליף אותו.
2>> שם קובץ
שגיאת תקן מכל הפקודות בצינור מנותבת לקובץ ששמו שם קובץ , לצרף אותו במקום להחליף אותו.
>>& שם קובץ
הן הפלט הסטנדרטי מהפקודה האחרונה והן משגיאה סטנדרטית מכל הפקודות מופנות מחדש לקובץ ששמו שם קובץ , לצרף אותו במקום להחליף אותו.
>@ fileId
FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת אלפתוח. הפלט הסטנדרטי מהפקודה האחרונה מופנה אל fileId , שכנראה נפתח לכתיבה.
2>@ fileId
FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת אלפתוח. שגיאת תקן מכל הפקודות בצינור מופנית אל fileId של הקובץ. התיק כנראה נפתח לכתיבה.
>&@ fileId
FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת אלפתוח. שני הפלט הסטנדרטי מהפקודה האחרונה ושגיאה סטנדרטית מכל הפקודות מופנים מחדש fileId של הקובץ. התיק כנראה נפתח לכתיבה.
אם הפלט הסטנדרטי לא הופנה, אזיexec הפקודה מחזירה את הפלט הסטנדרטי מהפקודה האחרונה בצינור. אם כל הפקודות של צינור לצאת באופן חריג או נהרגים או מושעה, אזexec יחזיר שגיאה הודעת השגיאה יכלול את הפלט של צינור ואחריו הודעות שגיאה המתארות את הסיומים חריגה; הקוד שגיאה משתנה יכלול מידע נוסף על סיום חריג האחרון נתקל. אם כל הפקודות כותב לקובץ השגיאה הסטנדרטי שלה ושגיאת תקן לא מנותבת, לאחר מכןexec תחזיר שגיאה; הודעת השגיאה תכלול את הפלט הסטנדרטי של הצינור, ואחריו הודעות על הסתייגות לא תקינה (אם בכלל), ולאחר מכן יציאת השגיאה הסטנדרטית.
אם התו האחרון של התוצאה או הודעת השגיאה הוא newline, אז התו נמחק בדרך כלל מהתוצאה או הודעת השגיאה. זה עולה בקנה אחד עם TCL אחרים לחזור ערכים, אשר בדרך כלל לא נגמר עם newlines. לעומת זאת, אם- קו ישר הוא ציין אז את השורה נגרר נשמר.
אם הקלט הרגיל אינו מנותב עם "" או "<<" או "<@", אזי הקלט הסטנדרטי עבור הפקודה הראשונה בצינור נלקח מתוך הקלט הסטנדרטי הנוכחי של היישום.
אם האחרון arg הוא `` `` ואז הצינור יבוצע ברקע. במקרה זהexecהפקודה תחזיר רשימה שאליה הם מזהי התהליך עבור כל תת-התהליכים בצנרת.הפלט הסטנדרטי מהפקודה האחרונה בצינור ילך לפלט הסטנדרטי של היישום אם הוא לא ינותב מחדש, ופלט השגיאה מכל הפקודות שבצנרת יעבור לקובץ השגיאה הסטנדרטי של היישום, אלא אם יופנה מחדש.
המילה הראשונה בכל פקודה נלקחת כשם הפקודה; תחליף tilde מבוצע על זה, ואם התוצאה לא מכיל חתכים אז הספריות במשתנה הסביבה PATH הם חיפשו עבור הפעלה לפי שם נתון. אם השם מכיל קו נטוי אז זה חייב להתייחס אל הפעלה נגיש מספריה הנוכחית. אין הרחבה "גלובית" או חלופות אחרות כמו פגזים מבוצעות על הטיעונים לפקודות.
בעיות ניידות
Windows (כל הגירסאות)
קריאה או כתיבה לשקע, תוך שימוש ב - ``@ fileId "" סימון, לא עובד. בעת קריאה משקע, יישום DOS של 16 סיביות יתלה ויישום של 32 סיביות יחזור מיד עם סיום הקובץ. כאשר סוג אחד של היישום כותב לשקע, המידע נשלח למסוף, אם קיים, או נמחק.
רכיב ה- Tk קונסולת טקסט יישומון אינו מספק יכולות IO אמיתי אמיתי. תחת Tk, בעת הפניה מ קלט רגיל, כל היישומים יראו סוף מיידי של הקובץ; יופנה מידע המופנה מחדש לפלט הסטנדרטי או לשגיאה סטנדרטית.
מקצבים קדימה או אחורה מתקבלים כמפרידי נתיבים עבור ארגומנטים לפקודות TCL. בעת ביצוע יישום, שם הנתיב שצוין עבור היישום עשוי להכיל גם מקפים קדימה או אחורה כמפרידי נתיבים. יש לזכור, עם זאת, כי רוב יישומי Windows לקבל טיעונים עם חתכים קדימה רק כמפרידי אפשרות ו backslashes רק נתיבים. כל ארגומנטים ליישום המציין שם נתיב עם קו נטוי קדמי לא יומרו באופן אוטומטי כדי להשתמש בתו ה- Backslash. אם ארגומנט מכיל חתכים קדמיים כמפריד הנתיב, ייתכן שהוא יוכר או לא יוכר כשם נתיב, בהתאם לתוכנית.
בנוסף, כאשר מתקשרים עם יישום DOS של 16 סיביות או של Windows 3.X, כל שמות הנתיבים חייבים להשתמש בתבנית הנתיב הקצרה, הנסתרת (לדוגמה, באמצעות '' applba ~ 1.def '' במקום '' applbakery.default '' ).
שני או יותר חתכים קדימה או אחורה בשורה נתיב מתייחסים לנתיב רשת. לדוגמה, שרשור פשוט של ספריית השורשc: / עם תיקיית משנה/ Windows / מערכת יניבc: // windows / system (שני חתכים יחד), אשר מתייחס לנקודת הר נקראמערכת על המכונה נקראחלונות (והc: / הוא התעלם), והוא לא שווה לc: / windows / system, המתאר ספריה במחשב הנוכחי. הקובץ להצטרף הפקודה יש להשתמש כדי לשרשר רכיבים הנתיב.
Windows NT
כאשר מנסים לבצע יישום,exec הראשון מחפש את השם כפי שצוין. ואז, לפי הסדר,.com, .exe, ו.עטלף מצורפים לסוף השם שצוין והוא מחפש את השם הארוך יותר. אם שם ספריה לא צוין כחלק משם היישום, הספריות הבאות יחפשו באופן אוטומטי בעת ניסיון לאתר את היישום:
הספרייה שממנה הועבר קובץ ההפעלה Tcl.הספרייה הנוכחית.ספריית המערכת של Windows NT 32 סיביות.ספריית המערכת של Windows NT 16 סיביות.ספריית הבית של Windows NT.הספריות המפורטות בנתיב. על מנת לבצע את הפקודה shellin פקודות כמודיר ועותק, על המתקשר להזיז את '`cmd.exe / c'' לפקודה הרצויה. Windows 95 כאשר מנסים לבצע יישום,exec הראשון מחפש את השם כפי שצוין. ואז, לפי הסדר,.com, .exe, ו.עטלף מצורפים לסוף השם שצוין והוא מחפש את השם הארוך יותר. אם שם ספריה לא צוין כחלק משם היישום, הספריות הבאות יחפשו באופן אוטומטי בעת ניסיון לאתר את היישום: הספרייה שממנה הועבר קובץ ההפעלה Tcl.הספרייה הנוכחית.ספריית מערכת Windows 95.ספריית Windows 95 הבית.הספריות המפורטות בנתיב. על מנת לבצע את הפקודה shellin פקודות כמודיר ועותק, על המתקשר להזיז את '`command.com / c'' לפקודה הרצויה. לאחר יישום DOS 16 סיביות יש לקרוא קלט סטנדרטי מתוך קונסולה ולאחר מכן צא, כל לאחר מכן להפעיל 16-bit DOS יישומים יראו את הקלט הסטנדרטי כבר סגור. יישומי 32 סיביות אין בעיה זו יפעל כראוי, גם לאחר יישום DOS 16 סיביות חושב קלט רגיל סגור. בשלב זה אין פתרון לעקיפת הבעיה. ניתוב מחדש ביןNUL: התקן ויישום של 16 סיביות לא תמיד עובד. בעת הפניה מNUL:, יישומים מסוימים עשויים להיתקע, אחרים יקבלו זרם אינסופי של בתים '0x01' ', וחלקם למעשה יקבלו סוף-סוף מיידי; נראה שההתנהגות תלויה במשהו שנכלל ביישום עצמו. בעת הפניה של יותר מ 4KNUL:, יישומים מסוימים יתלו. הבעיות לעיל לא יקרה עם יישומי 32 סיביות. כל היישומים DOS 16 סיביות פועלים באופן סינכרוני. כל קלט רגיל מתוך צינור ליישום DOS 16-bit נאסף לתוך קובץ זמני; הקצה השני של הצינור חייב להיות סגור לפני יישום DOS 16 סיביות מתחיל בביצוע.כל פלט רגיל או שגיאה מיישום DOS 16 סיביות לצינור נאסף לתוך קבצים זמניים; על היישום להסתיים לפני העברת הקבצים הזמניים לשלב הבא של הצינור. הסיבה לכך היא לעקיפת הבעיה עבור באג 95 Windows ביישום צינורות, וכיצד את תקן Windows 95 DOS פגז מטפל צינורות עצמו. יישומים מסוימים, כגוןcommand.com, לא צריך להתבצע באופן אינטראקטיבי. יישומים אשר לגשת ישירות לחלון המסוף, במקום לקרוא מן הקלט הסטנדרטי שלהם וכתיבה לפלט הסטנדרטי שלהם עלול להיכשל, לתלות Tcl, או אפילו לתלות את המערכת אם החלון הפרטי שלהם קונסולת אינו זמין להם. מקינטוש הexec הפקודה אינה מיושמת ואינה קיימת תחת מקינטוש. יוניקס הexec הפקודה מתפקדת במלואה ועובדת כמתואר. שגיאה (n), פתוח (n) ביצוע, צינור, ניתוב מחדש, תת-תהליכים חשוב: להשתמש ב איש פקודה ( % איש ) כדי לראות כיצד נעשה שימוש בפקודה במחשב הספציפי שלך. ראה גם
מילות מפתח




