Table of Contents
בניית מעטפת אישית ב C היא דרך מצוינת להעמיק את ההבנה של מערכות הפעלה, ניהול תהליכים ותכנות מערכת. פגז הוא יותר מאשר רק מתורגמן פקודה; זהו הממשק העיקרי בין המשתמש לבין הקרנל, מתן תכונות כמו בקרת עבודה, פיוט, תסריט, וניהול סביבה. בעוד שניתן ליישם כמה מאות שורות, הוספת יכולות מתקדמות לתוך כלי ייצור רחב, כדי ליצור תכונות ביצועים חזקים, אנו מבצעים ביצועים מתקדמים, כדי ליצור תכונות ביצועים מתקדמים, כדי לבצע את התכונות של פונקציות ביצועים, כדי לבצע את התכונות של פונקציות מתקדמות יותר, כדי לבצע את התכונות של פונקציות ביצועים מתקדמים, כדי לבצע את התכונות של פורמט C.
הבנת היסודות של Shell
בליבתו, קליפה מבצעת לולאה פשוטה: לקרוא קו של קלט, לצטט אותו לפקודות וטיעונים, לבצע פקודות אלה ולאחר מכן לחזור על כך, עם זאת, מעטפת אמיתית חייבת להתמודד עם מקרים רבים של קצה ולספק חוויית משתמש עקבית.הלאה הבסיסית - המכונה לעתים קרובות "לעבורת לוח זמנים כתובה" (REPL) - היא הלב של כל פגזים אינטראקטיביים.
[הפגז] פועל בשני מצבים עיקריים: FLT:0interinterrealFLT [1] ו-(FLT:2non-interactivecioFLT 3: 3 [במצב אינטראקטיבי] הוא מדפיס את המהירות (למשל, FLT:1) ומחכה לקלט המשתמש.הוא חייב לתמוך בשליטה בעבודה, אותות ועריכה.
הבנה היסטורית של פגזים כמו מעטפת בורנה, בשאר, וזש מספקת את ההקשר לתכונות שאנו מיישמים.פגזים מודרניים יורשים עשרות שנים של אפשרויות עיצוב - התפוצות, קבוצות תהליכים, אותות בקרת עבודה - אשר סטנדרטיים ב-POSIX. על ידי בניית פגזים מאפס, אתה מקבל תובנה מעשית בסטנדרטים אלה ואת העסקאות שמאחוריהם.
המונחים: a Custom Shell
כל פגזים, לא משנה כמה פשוט, חייבים לספק שירותים בסיסיים אלה:
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) ,הפעלתו של ה-[[1924]]: [[1924]]]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]
- (ב) ⁇ :0) ,Job Control:FLT:1 ניהול תהליכים ותהליכי רקע, קבוצות תהליכים וטיפול אותות.
- (ב) ויקרא: ויקרא: ויקרא: ויקרא י"א): "הבאה" (ב) "ה', "ה'" (ב)"ב)" (ב) "ה')" (ב')"ה', "ה')"ה', "ה'" (ב')"ה')"ה')"ה'"ה'"ה'"ב'"ה'"ה'.
- (ב) ,0) ,התמיכה: 1FLT (ה) הוציאו פקודות מרובות מקובץ, עם זרימה ותיקון אופציונלי.
- (ב) ויקרא י"ד: "וַיֹּאמַר עַמֶר אֱלֹהִים" (בראשית כ"ד, ט)
- ניהול:0 (Environment Management: 1FLT:1 inheriting and Changeing Environment Variing).
כל אחד מהרכיבים הללו אינטראקציה עם האחרים.לדוגמה, בקרת עבודה מסתמכת על קבוצות תהליכים, המשפיעות גם על האופן שבו הצטברות עובדת. בניית עיצוב מודולרי עם ממשקים ברורים בין סדקים, ביצוע וניהול עבודה יחסוך לך כאבי ראש רבים מאוחר יותר.
ארכיון תגיות: From Raw Line to Command Structure
ניתוח Lexical Analysis
(הופנה מהדף ה[[המאה ה-20]] הוא רצף של דמויות שמהווה יחידה הגיונית: פקודה, טיעון, מפעיל (FLT:10,FLT:11, FLT:11, FLT:12, FLT:12, ; ⁇ ; ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
גישה חזקה יותר משתמשת מכונת מדינה כדי לעקוב אם ה ⁇ נמצא בתוך ציטוט, רצף בריחה או טקסט רגיל.זה נמנע באגים נפוצים כמו חללים לא מתפתלים בתוך טיעונים.
מבנה פיקוד
הגנה על מבנה פשוט לייצג פקודה:
struct simple_cmd {
char **args; // command name + arguments, NULL-terminated
int argc; // number of arguments
char **redirect_in; // input redirection file (if any)
char **redirect_out; // output redirection file (if any)
int append; // 1 if >>, 0 if >
int background; // 1 if & is present
};
צינור הוא אז רשימה של פקודות פשוטות אלה, כל אחד עם הפניות משלו.ה ⁇ חייב גם לטפל בעץ הסינמס מופשט מלא (AST) ו- FLT:20 (מפעילים לא הגיוניים) ו- Semicolons לביצועים זמניים.
הוצאה להורג: Fork, Exec, and the Path
תבנית Fork-Exec
כדי לבצע תוכנית חיצונית, הקליפה הראשונה קוראת ל-FLT:21 ליצור תהליך של ילד.הילד קורא אז LT:22 (או גרסה) להחליף את תדמיתו עם התוכנית הרצויה.הורה חייב לחכות לילד (אם זה עבודה על הקרקע) או להוסיף אותו לרשימת העבודה (אם רקע זה הוא יסודי ומופיע בכל קליפות יוניקס.
אחד הניואנס הוא כי [15] נכשל אם התוכנית לא ניתן למצוא או לבצע.הפגז צריך לדווח שגיאות בחסד ללא התרסקות.
פיקוד מובנה
נבנה-ins כמו FLT:24 לשנות את המדינה של הקליפה (למשל, מנהל נוכחי) ולכן לא ניתן לבצע בתהליך הילד.הם חייבים לרוץ ישירות בתהליך הפגז.הדרך הקלה ביותר להתמודד עם בני-אדם היא לבדוק את שם הפיקוד לאחר parsing ולפני לכידת.אם הוא מתאים a-in, לבצע את הפונקציה C המתאים ולדלגמל את ה-c עבור תוואי בנוי: Commonins.
- (FLT:25) - לסיים את הקליפה
- (ב) ,(FLT:26) שינוי במאי
- (FLT:27) - הדפסת ספריה
- (FLT:28) - שינוי הסביבה
- LT:29 - מקומות עבודה
- (ב) [ה]:30] ,[עריכת קוד מקור]
- (FLT:32) - טענות הדפסה (עם התרחבות משתנה)
איכות הסביבה משתנה
הפגז יורש את הסביבה של ההורה ועליו לעבור את התהליכים של הילד.התפקיד של ה-FLT:33 משתמש בסביבה הנוכחית באופן אוטומטי.עבור פקודות בנויות כמו FLT:34, אתה יכול לשנות את המשתנה העולמי של FLT:35 או להשתמש ב-FLT:36 תמיכה החלפת משנה בטיעוני פיקוד (למשל, LTF:37) דורש הרחבה ל-SECIX ערך לפני ביצוע זה, כדי לסרוק את הסביבה.
החלטה
כאשר הפקודה אינה בנויה, הפגז חייב לאתר את המיומנות באמצעות ה-FLT:39 הסביבה משתנה.ה-FLT:40 פועל זה באופן אוטומטי אם הפקודה אינה מכילה slash. עם זאת, ייתכן שתרצה ליישם את החלטת הנתיב שלך עבור כניסה או מסיבות אבטחה.
פיפינג וההפניה
יישום חד-פעמי
(ב) עיין בפרשת ה[[המאה ה-20]], ב[[1924]], ב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]], [[1924]]]]]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]], [[1924]], [[[[1924]],
היזהרו מניהול תיאורי קבצים: עליכם לסגור את הסוף הלא מנוצל בכל ילד, ולסגור את כל הצנרת של ההורה לאחר שזרקו את כל הילדים.
מספר רב של צינורות
עבור צינורות ארוכים יותר כמו FLT:50, אתה צריך צינורות מרובים. גישה נפוצה היא ליצור צינור עבור כל שלב ביניים.תהליך הילד עבור FLT:51 כותב ל הצינור הראשון; FLT:52 קורא מן הצינור הזה וכותב אל הבא; ו FLT:53 קורא מן הצינור האחרון, כי אתה יכול ליישם את זה באופן גמיש: עבור כל פקודה לאחר הראשון, ליצור מסלול חדש, כדי למנוע את צינורות כדי לכתוב את צינורות פתוח כדי לכתוב את כל אחד מהם, כדי לפתוח את הצינורות לפני כן, כדי לכתוב את הצינורות, כדי לכתוב את התוספת של הילד החדש, כדי לכתוב את הצינור הקודם, כדי לפתוח את הסורקים, כדי לכתוב את הצינורות, כדי לכתוב את הצנרת, כדי לכתוב את הצנרת, כדי לכתוב את התוספת של המחברים, כדי לכתוב את התוספתן של הילד החדש, כדי לכתוב את התוספת של הילד הראשון, כדי לכתוב את הצינור הראשון, כדי לכתוב את הנקה, כדי לכתוב את הנקה, כדי לפתוח מחדש, כדי לכתוב את הצינור הראשון, כדי לכתוב את הסורקים, כדי לפתוח מחדש של המחברת של המחברים, כדי לכתוב את הצינור הראשון, כדי לכתוב את הצינור הראשון, כדי לכתוב את הנקה, כדי לכתוב את הסורקים, כדי לכתוב את הסורקים, כדי לכתוב את הסורקים
I/O-Redirection
(ב) ויקרא (ב) ויקרא ויקרא ויקרא ויקרא יט): "וַיָּבְתָּבְתָּבְתָּבָה אִם הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא
כמו כן, עליך לתמוך בהפניה של מפיץ (ראה:65) ופניית הפניה משולבת (FreaLT:66) זה דורש פיצוי כדי לזהות את מספר הקובץ ואת שם הקובץ.
בקרת עבודה
קבוצות תהליכים
בקרת איוב בנויה סביב הרעיון של קבוצות תהליכים.כל צינור (משרה) ממוקם בקבוצת התהליך שלו, עם מזהה הקבוצה שווה לזיהוי התהליך של התהליך הראשון בעבודה.TheFLT:67 או FLT:68 מערכת שנקראת מערכת להגדיר את תהליך של כל ילד מיד לאחר שק.הפגז עצמו שייך לקבוצת התהליך שלו (עבור קבוצת ה-eground).
קבוצת המבצר של הטרמינל מנוהלת על ידי FLT:69 כאשר עבודה פועלת בחזית, הפגז חייב לתת למסוף לקבוצת התהליך של העבודה הזו.לאחר השלמת העבודה (או מושעה), הקליפה מחזירה את הטרמינל.זה קריטי לטיפול הולם של Ctrl-C (FLT:70) ו- Ctrl Z (Falze) (R:71), אשר מועברים להליך תקין של CIRST.
אותות
הפגז חייב להתקין מטפלות אות עבור FLT:72 כדי לקצור תהליכי ילדים.המנהל צריך להתקשר:73 עם FLT:74 בלולאה כדי לאסוף את כל הילדים שיצאו.
(ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
Foreground andרקע משרות
כאשר עבודה הושקה במבצר (ללא עקבות:79), הקליפה מחכה לה להשלים באמצעות FLT:80 ללא דגלים מיוחדים בזמן ההמתנה, הפגז עשוי להיות חסום, אבל זה עדיין צריך להתמודד עם אותות (למשל, Ctrl-C להפריע לחכות לחכות) טכניקה נפוצה היא להשתמש בלולאה בדיקות עבור השלמת תהליכים ותהליכי מקבילה.
(הופנה מהדף ⁇ ) ⁇ (ה- ⁇ ) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
ניהול נתונים
יישום שולחן עבודה (למשל, מערך של מבנים) כדי לעקוב:
- תעודת זהות עבודה (קטן שהוקצה על ידי הקליפה)
- מעבד ID
- רשימת תהליכים (אחד לכל פקודה בצנרת)
- סטטוס (ריצה, נפסק, נגמר)
- מחרוזת פיקוד (לתצוגה)
בכל אחד מהם, 87, לעדכן את מעמדו של העבודה המושפעת.כאשר מסתיימת עבודה חשאית, להסיר אותה מהרשימה.עבור עבודות רקע, להודיע למשתמש באופן מסונכרן (טביע הודעה כמו "קודש + נעשה").
עיבוד: Batch
תסריט
כדי לתמוך בקבצי תסריט, להוסיף דגל פיקוד (למשל, FLT:88) או פקודה מובנה-inFLT:89) הפגז פותח את הקובץ, קורא שורות, ומעבד אותם כאילו הם מאופיינים באופן אינטראקטיבי, למעט כי אין שום מהירות מודפסת ובקרת עבודה יכול להיות פשוט (התחילה בדרך כלל פועל על הקרקע).
טיפול שאנג (ראה: 90) הוא אופציונלי אבל פשוט: אם שני העמודים הראשונים של קובץ התסריט הם FLT:91, הקרנל יפרש את השאר כמו המתורגמן.עבור הקליפה שלך לעבוד כמתורגמן תסריט, זה חייב להתעלם קו המפץ כאשר קוראים מקובץ (כמה פגזים עושים; אחרים מתייחסים אליו כתגובה).
בקרת זרימה
(ב) תמיכה מלאה בכתיבה מחייבת כפליים והוצאה להורג של מהדורות:592, (ב) ,9,9) ,(ה) ,(ה) ,(ה) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
במינימום, התמיכה בביצוע תנאי בהתבסס על קודי היציאה (FIRLT:99 ), פועלת ס"מ בלבד אם ס"ד1 יצליח) מוסיפה ערך עצום.אפשר לטפל בזה במהלך ביצוע: להפעיל את הפקודה הראשונה, לבדוק את מצב היציאה שלו ולבצע את המצב הבא באופן תנאי.
טעות בתסריטאים
לעתים קרובות התסריטים זקוקים לטיפול בשגיאות חזקות.מיישם את האפשרות של 100:100 כדי לצאת מהתסריט אם כל פקודה לא תצליח, גם תמיכה ב-FLT:101 כדי לתפוס אותות ושגיאות.תכונות אלה דורשות מכונה גלובלית וניקוי זהיר (זיכרון, סגירת קבצים).
תכונות מתקדמות
ההיסטוריה הפיקוד
(ה) מנגנון היסטוריה מאפשר למשתמשים לזכור, לערוך ולארגן מחדש פקודות קודמות, להטמיע גרף עגול לאחסון פקודות N האחרונות (למשל, 1000) בהוראות שנבנו:102 ו-FLT:103 (או יישום מקשי הניווט של בשאר: למעלה/down) שימוש ב-104 או ב-FLT:105:
המונחים:
השלמת Tab מציעה פקודות, קבצים או משתנים. עבור קבצים, אתה יכול להשתמש בספריה (FLT:106 ספריה כדי רשימה של תוכן ניהולי תואם את התיקון הנוכחי.עבור פקודות, לסרוק את ה-FLT:107 במאיות. עבור משתנים, לחפש את הסביבה.תכונה זו היא תוספת פופולרית ומלמדת אותך על התאמה רצינית ומחרוזת.
החלפת והתרחבות
מעבר לפשטות (FLT:108) תמיכה בהתרחבות החרפה (FcioLT:109), הרחבה (Silde הרחבה (Silde:109) , החלפה פיקודית (IRLT:111 או backticks), והתרחבות ⁇ (ראה: 112) כל אחד דורש שלב מתואם ייחודי, במיוחד, מורכב משום שהוא כולל ביצוע תת-קרקעית ולכידתו של הילד.
Aliases
Aliases מאפשר למשתמשים להגדיר פקודות יד קצרות (למשל, FLT:113) לאחסן כינויים בטבלה ישה או רשימה מקושרת. במהלך אסימוניזציה, אם האסימון הראשון מתאים alias, להחליף אותו עם הרחבה שלו. להיות זהיר עם התרחבות חוזרת (Bash תומך בו אך מגביל את עומק הנסיעה).
מסקנה
בניית מעטפת אישית ב C עם תכונות מתקדמות היא פרויקט מקיף הנוגע למושגים מערכתיים הליבה רבים: ניהול תהליכים, אותות, תיאורי קבצים, ו parsing. על ידי יישום בקרת עבודה, פישוט, הפניה, תסריט, ונוחות נוספות כמו היסטוריה והשלמת הכרטיסיה, אתה יוצר כלי שהוא גם חינוכי ומעשי.הקוד שאתה כותב יעמיק את ההבנה שלך של איך בעבודה Zsh תחת המידות, ורווחה אמינה עבור עשרות שנים רבות של הנדסה מודרנית והערכה.
החל עם לולאה מינימלית ולהוסיף תכונות.מבחן כל תוספת ביסודיות, במיוחד מקרים קצה מעורבים צינורות מרובים, תהליכי רקע ואינטראקציות אות. הרבה פגזי קוד פתוח (כמו FLT:0GNU בשארFLT:1 ו-FLT:2ZshFLT 3:3) זמינים עבור הפניה, כמו גם מפרטים POSIX להתנהגות.