מה זה shell ולמה יש כמה סוגים¶
בשלב מסוים בלמידת לינוקס תיתקלו במונח shell, ותגלו שיש לא אחד אלא כמה - bash, zsh, fish, ועוד. זה מבלבל בהתחלה, כי לא ברור למה בכלל צריך כמה גרסאות של "אותו דבר". אז בואו נסביר מה זה shell באמת, ולמה יש ריבוי כזה של אפשרויות.
אז מה זה בכלל shell¶
shell הוא תוכנית שמתפקדת כמתורגמן בינכם לבין הקרנל של המערכת. כשאתם מקלידים ls ולוחצים Enter, אתם לא מדברים ישירות עם ליבת המערכת ההפעלה - אתם מדברים עם ה-shell, שמפרש את מה שהקלדתם, מריץ את הפקודה המתאימה, ומחזיר לכם את התוצאה. הטרמינל עצמו הוא רק החלון שבו אתם רואים את זה - shell הוא התוכנית שבאמת עושה את העבודה מאחורי הקלעים.
זה בדיוק כמו ההבדל בין הרכב לבין הנהג. הטרמינל הוא הרכב שבו אתם יושבים, וה-shell הוא הנהג שמקבל את ההוראות שלכם ומבצע אותן.
bash - ברירת המחדל שכולם מכירים¶
bash, קיצור של Bourne Again Shell, הוא ה-shell הכי נפוץ ונלמד בעולם לינוקס, וברוב ההפצות זהו ברירת המחדל. הוא ותיק, יציב, ונמצא כמעט בכל מערכת לינוקס שתפגשו, מה שהופך אותו לבחירה הטבעית ללמידה - כל מדריך שתמצאו, כל סקריפט שתראו, כמעט תמיד יהיה כתוב לbash קודם כל.
zsh - השדרוג הפופולרי¶
zsh דומה מאוד ל-bash מבחינת תחביר בסיסי, אבל מגיע עם תוספות נוחות רבות - השלמה אוטומטית חכמה יותר, תמיכה טובה יותר בהתאמה אישית, וניתן להרחיב אותו עם תוספים (plugins) שמוסיפים צבע, מידע שימושי, וקיצורי דרך. במק, zsh הוא בעצם ברירת המחדל כבר כמה שנים. הרבה מפתחים מנוסים עוברים אליו אחרי שהם כבר מכירים bash היטב, כי הוא נותן חוויית עבודה נעימה יותר בלי לוותר על שום דבר.
fish ואחרים¶
יש עוד shells כמו fish, שמתמקד בנוחות מיידית למתחיל - השלמה אוטומטית וצביעת תחביר עובדות מהקופסה בלי הגדרה נוספת. הבעיה שלו היא שהתחביר שונה מספיק מ-bash כדי שסקריפטים שכתובים ל-bash לא יעבדו בו כמו שהם, מה שהופך אותו לפחות פרקטי כברירת מחדל למי שרוצה להבין את רוב הקוד שקיים באינטרנט.
אז למה בכלל יש כמה, ואיזה לבחור¶
התשובה הכנה היא שלכל shell יש קהל משלו, בהתאם למאזן שהוא בוחר בין תאימות, נוחות והתאמה אישית. אבל למתחילים, ההמלצה שלי פשוטה - תתחילו עם bash. הוא ברירת המחדל ברוב מערכות לינוקס, כל התיעוד באינטרנט כתוב עבורו קודם כל, וכל סקריפט שתלמדו לכתוב יעבוד בו בלי הפתעות. אחרי שאתם מרגישים בנוח, ותרצו לשדרג את חוויית העבודה היומיומית, המעבר ל-zsh הוא עניין של דקות, כי רוב מה שלמדתם ב-bash עובד בדיוק אותו הדבר.
איך בודקים איזה shell אתם משתמשים בו כרגע¶
פקודה קטנה ושימושית:
זה מדפיס את הנתיב ל-shell שמוגדר לכם כברירת מחדל. אם תראו /bin/bash, אתם על bash. אם תראו /bin/zsh, אתם על zsh. שווה לדעת את זה, כי אם אתם עוקבים אחרי מדריך שכתוב לbash ואתם משתמשים ב-shell אחר, לפעמים תראו התנהגות מעט שונה בפרטים הקטנים.
למה זה בכלל משנה לכם¶
ההבנה הזאת חשובה לא רק כידע כללי - כשאתם כותבים סקריפט ומתחילים אותו עם #!/bin/bash, אתם בעצם אומרים למערכת באיזה shell ספציפי להריץ אותו, בלי קשר לאיזה shell אתם עצמכם עובדים בו כרגע. זו הסיבה שסקריפטים כתובים לרוב ל-bash באופן ספציפי - זה מבטיח שהם ירוצו בצורה עקבית בכל מקום, בלי תלות בהעדפה האישית של מי שמריץ אותם.
מאיפה ממשיכים¶
אם אתם רק מתחילים, אל תתעכבו יותר מדי על השאלה איזה shell לבחור. תלמדו bash, כי זה הבסיס שכל השאר בנוי עליו, ותעברו לגרסאות מפוארות יותר כשתרגישו שאתם צריכים אותן.
בקורס לינוקס הבסיסי שלנו כל הפרק על הטרמינל בנוי סביב bash, בדיוק כדי לתת לכם את הבסיס הכי יציב ורלוונטי שיש.
התחילו ללמוד bash בקורס לינוקס הבסיסי
ואם אתם מתלבטים בין bash ל-zsh בעבודה היומיומית, תשאלו בדיסקורד, יש שם אנשים שישמחו לחלוק את הדעה שלהם.