כאשר עדיף להשתמש #! / Bin / bash במקום #! / Bin / sh ב Shell סקריפט?
כאשר אתה יוצר סקריפט פגז חדש, אתה רוצה לוודא שזה כמו בעיה חופשית ככל האפשר, אבל לפעמים זה יכול להיות קצת מבלבל לדעת איזה שבנג הוא אחד הטובים ביותר עבורך להשתמש. באותו פתק, היום SuperUser Q & A פוסט יש את התשובה לשאלה של מבולבל הקורא.
מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ מונחה על ידי הקהילה של אתרי אינטרנט של Q & A.
השאלה
קורא SuperUser Hendre רוצה לדעת מתי עדיף להשתמש #! / bin / bash במקום #! / bin / sh ב סקריפטים פגז:
מתי זה מתאים יותר לשימוש #! / bin / bash ולא #! / bin / sh בתסריט פגז?
מתי עדיף להשתמש #! / bin / bash במקום #! / bin / sh בתסריט פגז?
התשובה
לתגובת התורמים של SuperUser יש את התשובה עבורנו:
בקצרה:
- ישנם מספר פגזים אשר ליישם superset של מפרט POSIX ש. במערכות שונות, / bin / sh עשוי להיות קישור אפר, bash, מקף, ksh, zsh, וכו 'זה תמיד יהיה תואם sh אף, לא csh או דגים.
- כל עוד אתה מקל על sh רק תכונות, אתה יכול (וכנראה אפילו צריך) להשתמש #! / bin / sh ואת התסריט צריך לעבוד בסדר, לא משנה איזה פגז זה.
- אם אתה מתחיל להשתמש בתכונות ספציפיות ל- bash (כלומר מערכים), אתה צריך לבקש באופן ספציפי bash כי, גם אם / bin / sh כבר מחייב bash על המערכת שלך, זה אולי לא על כל המערכת של אחרים, ואת התסריט שלך לא יפעל שם. כנ"ל לגבי zsh ו ksh, כמובן.
- גם אם התסריט מיועד לשימוש אישי בלבד, ייתכן שתראה כי מערכות הפעלה מסוימות משתנות / bin / sh במהלך שדרוגים. לדוגמה, על דביאן זה היה אמור להיות bash, אך הוחלף מאוחר יותר עם מקף מינימלי מאוד. תסריטים אשר השתמשו באשיעות אבל היו #! / bin / sh נשבר פתאום.
למרות זאת:
- אפילו #! / bin / bash זה לא נכון. במערכות שונות, באש יכול לחיות / usr / bin, / usr / pkg / bin, או / usr / local / bin.
- אפשרות אמינה יותר היא #! / usr / bin / env bash, אשר משתמש $ PATH. למרות כלי env עצמו אינו מובטח בהחלט, / usr / bin / env עדיין עובד על יותר מערכות מאשר / bin / bash עושה.
יש לך משהו להוסיף להסבר? נשמע את ההערות. רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי מתמצא? בדוק את נושא הדיון המלא כאן.
אשראי תמונה: ויקיפדיה