פיקוד לינוקס

ביצוע תתי-תהליכים (sub)

תַקצִיר

exec? מתגים ? ARG? ... ?

תיאור

פקודה זו מטפלת בטיעוניה כמפרט של תת-תחזוקה אחת או יותר לביצוע. הטיעונים לובשים צורה של צינור פגז רגיל שבו כל ארגון הופך למילה אחת של פקודה, וכל פקודה מובחרת הופכת לתת-תהליכים.

אם הארגומנטים הראשונים להתחלה - אז הם מטופלים כמו בוררי שורת הפקודה והם לא חלק מפרט צינור. המתגים הבאים נתמכים בשלב זה:

- קו ישר

שומר על קו חדש נגרר בפלט של צינור. בדרך כלל שורה חדשה נגרר יימחק.

-

מסמן את סוף המתגים. הטיעון הבא יטופל כארגוני הראשון גם אם הוא מתחיל ב - .

אם ארגן (או זוג של ארגומנטים ) יש אחת מהצורות המתוארות להלן, אז זה משמש את exec לשלוט על זרימת קלט ופלט בין subprocess (es). טיעונים כאלה לא יועברו לתת-התהליכים. בצורות כגון " fileName " fileName יכול להיות בארגומנט נפרד מ - "<" "או באותו ארגומנט ללא רווח (כלומר," fileName ").

|

מפריד פקודות שונות בצינור. הפלט הסטנדרטי של הפקודה הקודמת יופץ לקלט הסטנדרטי של הפקודה הבאה.

|

מפריד פקודות שונות בצינור. הן הפלט הסטנדרטי והן שגיאת התקן של הפקודה הקודמת יופנו לקלט הסטנדרטי של הפקודה הבאה. צורה זו של ניתוב מחדש עוקפת צורות כגון 2> ו->.

<שם קובץ

הקובץ בשם fileName נפתח ומשמש כקלט הסטנדרטי עבור הפקודה הראשונה בצינור.

<@ fileId

FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת לפתיחה . הוא משמש קלט רגיל עבור הפקודה הראשונה בצינור. FileId חייב להיות נפתח לקריאה.

<< ערך

הערך מועבר לפקודה הראשונה כקלט הסטנדרטי שלה.

> שם קובץ

הפלט הסטנדרטי מהפקודה האחרונה מופנה מחדש לקובץ בשם fileName , מחליף את התוכן הקודם שלו.

2> fileName

שגיאת תקן מכל הפקודות בצנרת מנותבת לקובץ בשם FileName , מחליף את התוכן הקודם שלו.

> & fileName

הן הפלט הסטנדרטי מהפקודה האחרונה והן משגיאה סטנדרטית מכל הפקודות מופנות מחדש לקובץ בשם fileName , מחליף את התוכן הקודם שלו.

>> fileName

הפלט הסטנדרטי מהפקודה האחרונה מופנה מחדש לקובץ בשם fileName , שמקשר אליו במקום לדרוס אותו.

2 >> fileName

שגיאת תקן מכל הפקודות בצנרת מנותבת לקובץ בשם fileName , מוסיפה אליו ולא מחליפה אותו.

>> & שם קובץ

הפלט הסטנדרטי מהפקודה האחרונה ומהשגיאה הסטנדרטית מכל הפקודות מופנות מחדש לקובץ בשם FileName , שמקשר אליו במקום לדרוס אותו.

> @ fileId

FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת לפתיחה . הפלט הסטנדרטי מהפקודה האחרונה מופנה לקובץ fileId , אשר חייב להיפתח לכתיבה.

2> @ fileId

FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת לפתיחה . שגיאת תקן מכל הפקודות בצינור מנותבת לקובץ fileId . התיק כנראה נפתח לכתיבה.

> & fileID

FileId חייב להיות המזהה של קובץ פתוח, כגון ערך ההחזרה משיחה קודמת לפתיחה . שני הפלט הסטנדרטי מהפקודה האחרונה ושגיאה סטנדרטית מכל הפקודות מנותבים לקובץ fileId . התיק כנראה נפתח לכתיבה.

אם הפלט הסטנדרטי לא הופנה מחדש, הפקודה exec מחזירה את הפלט הסטנדרטי מהפקודה האחרונה בצינור. אם כל הפקודות בצנרת יוצאות באופן לא תקין או ייהרגו או יושעו, exec יחזיר שגיאה והודעת השגיאה תכלול את הפלט של הצינור ואחריו הודעות שגיאה המתארות את הסיומים הלא תקינים; המשתנה errorCode יכיל מידע נוסף על סיום חריג האחרון נתקל. אם כל הפקודות כותב לקובץ השגיאה הסטנדרטי שלה ושגיאת התקן אינה מנותבת, exec יחזיר שגיאה; הודעת השגיאה תכלול את הפלט הסטנדרטי של הצינור, ואחריו הודעות על הסתייגות לא תקינה (אם בכלל), ולאחר מכן יציאת השגיאה הסטנדרטית.

אם התו האחרון של התוצאה או הודעת השגיאה הוא newline, אז התו נמחק בדרך כלל מהתוצאה או הודעת השגיאה. זה עולה בקנה אחד עם TCL אחרים לחזור ערכים, אשר בדרך כלל לא נגמר עם newlines. עם זאת, אם -keepnewline צוין אז את השורה נגרר נשמר.

אם הקלט הרגיל אינו מנותב עם "" או "<<" או "<@", אזי הקלט הסטנדרטי עבור הפקודה הראשונה בצינור נלקח מתוך הקלט הסטנדרטי הנוכחי של היישום.

אם הארגומנט האחרון הוא "&", אזי הצינור יבוצע ברקע. במקרה זה, פקודת 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: / עם תיקיית משנה / חלונות / מערכת תניב c: / Windows / מערכת (שני חתכים יחד), אשר מתייחס לנקודת הר נקרא מערכת על המכונה חלונותc: / is ignored), ולא שווה ל- c: / windows / system , המתאר ספריה במחשב הנוכחי. הפקודה הקובץ להצטרף צריך לשמש לשרשרת רכיבי נתיב.

Windows NT

כאשר מנסים לבצע יישום, exec הראשון מחפש את השם כפי שצוין. לאחר מכן, לפי הסדר ,. Com , .exe ו- .bat מצורפים לסוף השם שצוין, והוא מחפש את השם הארוך יותר. אם שם ספריה לא צוין כחלק משם היישום, הספריות הבאות יחפשו באופן אוטומטי בעת ניסיון לאתר את היישום:

הספרייה שממנה הועבר קובץ ההפעלה Tcl.
הספרייה הנוכחית.
ספריית המערכת של Windows NT 32 סיביות.
ספריית המערכת של Windows NT 16 סיביות.
ספריית הבית של Windows NT.
הספריות המפורטות בנתיב.

על מנת לבצע את פקודות הקליפה המובנות כמו dir והעותק , על המתקשר להעביר את הפקודה ' cmd.exe / c ' לפקודה הרצויה.

Windows 95

כאשר מנסים לבצע יישום, exec הראשון מחפש את השם כפי שצוין. לאחר מכן, לפי הסדר ,. Com , .exe ו- .bat מצורפים לסוף השם שצוין, והוא מחפש את השם הארוך יותר. אם שם ספריה לא צוין כחלק משם היישום, הספריות הבאות יחפשו באופן אוטומטי בעת ניסיון לאתר את היישום:

הספרייה שממנה הועבר קובץ ההפעלה Tcl.
הספרייה הנוכחית.
ספריית מערכת Windows 95.
ספריית Windows 95 הבית.
הספריות המפורטות בנתיב.

על מנת לבצע את פקודות הקליפה המובנות כמו dir והעותק , על המתקשר להעביר את הפקודה `` com.com \ c '' לפקודה הרצויה.

לאחר יישום DOS 16 סיביות יש לקרוא קלט סטנדרטי מתוך קונסולה ולאחר מכן צא, כל לאחר מכן להפעיל 16-bit DOS יישומים יראו את הקלט הסטנדרטי כבר סגור. יישומי 32 סיביות אין בעיה זו יפעל כראוי, גם לאחר יישום DOS 16 סיביות חושב קלט רגיל סגור. בשלב זה אין פתרון לעקיפת הבעיה.

ניתוב מחדש בין ה- NUL: התקן ויישום של 16 סיביות לא תמיד פועל. בעת ניתוב מחדש מ- NUL: יישומים מסוימים עשויים להיתקע, אחרים יקבלו זרם אינסופי של בתים בגודל 0x01 '', וחלקם אכן יקבלו באופן מיידי קובץ קצה מיידי; נראה שההתנהגות תלויה במשהו שנכלל ביישום עצמו. בעת ניתוב מחדש של 4K או יותר ל- NUL: חלק מהיישומים יתלוו. הבעיות לעיל לא יקרה עם יישומי 32 סיביות.

כל היישומים DOS 16 סיביות פועלים באופן סינכרוני. כל קלט רגיל מתוך צינור ליישום DOS 16-bit נאסף לתוך קובץ זמני; הקצה השני של הצינור חייב להיות סגור לפני יישום DOS 16 סיביות מתחיל בביצוע. כל פלט רגיל או שגיאה מיישום DOS 16 סיביות לצינור נאסף לתוך קבצים זמניים; על היישום להסתיים לפני העברת הקבצים הזמניים לשלב הבא של הצינור. הסיבה לכך היא לעקיפת הבעיה עבור באג 95 Windows ביישום צינורות, וכיצד את תקן Windows 95 DOS פגז מטפל צינורות עצמו.

יישומים מסוימים, כגון command.com , לא צריך להיות מופעל באופן אינטראקטיבי. יישומים אשר לגשת ישירות לחלון המסוף, במקום לקרוא מן הקלט הסטנדרטי שלהם וכתיבה לפלט הסטנדרטי שלהם עלול להיכשל, לתלות Tcl, או אפילו לתלות את המערכת אם החלון הפרטי שלהם קונסולת אינו זמין להם.

מקינטוש

הפקודה exec אינו מיושם ואינו קיים תחת מקינטוש.

יוניקס

הפקודה exec מתפקדת במלואה ועובדת כמתואר.

ראה גם

שגיאה (n), פתוח (n)

מילות מפתח

ביצוע, צינור, ניתוב מחדש, תת-תהליכים

חשוב: השתמש בפקודת הגבר ( % man ) כדי לראות כיצד נעשה שימוש בפקודה במחשב הספציפי שלך.