תפקידי ה Shell
מעטפת יוניקס היא בסך הכל תוכנית שמפעילה תוכניות אחרות. נבחן כעת מספר מאפיינים משותפים לתוכניות מעטפת.
1. הפעלת תוכניות אחרות
התפקיד הראשון והמרכזי של המעטפת הוא הפעלת תוכניות אחרות. ביוניקס תוכנית היא קובץ הפעלה שנמצא בתיקייה קבועה מראש. כשאתם כותבים בשורת הפקודה:
$ cal
המעטפת מחפשת קובץ הפעלה בשם cal באחת מתיקיות החיפוש. כדי להציג את רשימת התיקיות בהן המעטפת מחפשת תוכניות תוכלו לכתוב בשורת הפקודה:
$ echo $PATH
בהמשך הקורס נלמד גם כיצד לשנות רשימה זו.
2. הפרדה בין מילים והעברת פרמטרים
לרוב אנו יכולים להפעיל תוכניות עם מילים נוספות לאחר שם התוכנית, מילים הנקראות פרמטרים. כך הפקודה שכבר ראינו:
$ cal 11 1918
מציגה את לוח השנה כפי שהיה בנובמבר 1918. תפקיד המעטפת לפענח את השורה ולהבין ממנה שיש להפעיל את התוכנית cal עם שני פרמטרים.
תוכניות שרצות בסביבת יוניקס מקבלות כקלט רשימה של פרמטרים. רשימה זו מגיעה מתוכנית המעטפת בעת הפעלת התוכנית ולאחר פענוח השורה. הרשימה מועברת לתוכנית כמערך כאשר כל תא במערך מייצג מילה נוספת מתוך השורה.
באופן רגיל רשימת הפרמטרים מורכבת מהפרדת המילים השונות בשורת הפקודה לפי סימן הרווח. נסו להקליד את הפקודה הבאה:
$ echo I Have A Dream
התוצאה נראית כך:
I Have A Dream
לאן נעלמו הרווחים בין המילים? התעמקות בעבודת המעטפת תלמד אותנו שהתוכנית echo מקבלת רשימה של מילים להדפיס, רשימה המתקבלת מפיצול שורת הפקודה לפי רווחים. עבור הקלט שהוצג הרשימה מורכבת מ-4 מילים ונראית כך:
(I, Have, A, Dream)
אנו יכולים לשלוט בחלוקת המשפט למילים ובבניית רשימת הפרמטרים באמצעות סימן המרכאות, סימן הגרש בודד וסימן ה . כל אחד מסימנים אלו יכול להגיד למעטפת שתו הרווח שבא אחריו אינו באמת מסמן הפרדה בין מילים אלא הינו חלק מפרמטר יחיד.
נסו להקליד את הפקודות הבאות:
$ echo "I Have A Dream"
$ echo 'I Have A Dream'
$ echo I\ \ Have\ \ A\ \ Dream
בשלושת המקרים הרווחים הודפסו על המסך כתוצאת הפקודה echo. במהלך הקורס נתעמק בהבדלים בין שלושת הסימנים. חשוב לציין כאן שבניגוד להפעלה קודמת, הפעם הרשימה ש echo קיבלה כפרמטר הורכבה מאיבר אחד בלבד:
(I Have A Dream)
סימן הגרשיים הוא הדרך שלנו לבקש מהמעטפת לחלק את השורה למלים בדרך אחרת מברירת המחדל. קבצים ותיקיות הכוללים רווח כחלק משם הקובץ מחייבים שימוש מושכל בסימן זה.
3. החלפות נוספות
הפקודה touch מייצרת קובץ בתיקייה הנוכחית. נסו את זה:
$ touch info.txt
הפקודה ls מציגה את רשימת הקבצים בתיקייה הנוכחית. נסו את זה:
$ ls
ותוכלו לראות את הקובץ החדש שיצרתם info.txt
ואולי קבצים נוספים בתיקייה. על הפקודה echo כבר דיברנו וראינו שהיא מדפיסה את הקלט שהעברנו לה.
עכשיו ננסה את התרגיל הבא:
$ echo $USER
$ touch $USER
$ ls
הפקודה echo הדפיסה את שם המשתמש שלכם. הפקודה touch יצרה קובץ חדש ששמו כשם המשתמש שלכם. שני המקרים הציגו יכולות החלפת משתנים של המעטפת. מילים המתחילות בסימן $ מייצגות קריאה ממשתנים: תוכנית המעטפת תחליף את המילה ואת סימן ה-$ בתחילתה בערך המשתנה לפני הפעלת התוכנית המרכזית בשורה.
החלפת המשתנים הביאה לזה שהפקודות שכתבנו פוענחו לשורות הבאות:
$ echo ynon
$ touch ynon
4. תקציר הפקודות שהוצגו בפרק
# quoting
$ echo hello world
hello world
$ echo "hello world"
hello world
# create two files: one named my and the other named file
$ touch my file
# create one file named my file (with a space in between)
$ touch "my file"
# variable substitution - prints the current user name
$ echo $USER
# quoting
$ echo hello world
hello world
$ echo "hello world"
hello world
# create two files: one named my and the other named file
$ touch my file
# create one file named my file (with a space in between)
$ touch "my file"
# variable substitution - prints the current user name
$ echo $USER