מה ההבדל בין הפעלת סקריפט bash באמצעות sh ו- ./

אותה שאלה יכולה להתעורר כשמשתמשים בכל סוג של סקריפט, לא רק בשאלות. האם יש הבדל גדול בין הפעלת סקריפט דרך המתורגמן להפעלה ישירה?

תעלומה נוספת שנחשוף בפוסט מעניין זה מ- Let's Use Linux (uL).


כאשר אתה מריץ סקריפט על ידי העברת שם הקובץ של הסקריפט למתורגמן (sh, python, perl וכו '), אתה למעשה מבצע את המתורגמן ומעביר את התוכנית שברצונך לבצע כארגומנט. לדוגמא, אנו מנהלים את המתורגמן sh על ידי העברתו את הטיעון miscript.sh.

ש miscript.sh

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

./myscript.sh

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

1) על התסריט לכלול "קו מפץ". זו השורה הראשונה של התסריט, אשר חייב להתחיל בתווים #! וכי עליכם לציין את הנתיב בו נמצא המתורגמן. חשוב לציין כי תנאי זה נכון לכל סוג של סקריפט (פיתון, פרל וכו '), ולא רק עבור אלה מה- bash.

כך, למשל, התסריט שלנו צריך להכיל את השורות הבאות כשורה הראשונה:

#! / bin / bash

2) על הקובץ להיות בעל הרשאות ביצוע:

כדי להעניק הרשאות ביצוע לתסריט שלנו, עלינו לכתוב:

chmod a + x miscript.sh

מוכן, עכשיו פשוט תריץ את זה ככה:

./myscript.sh

או על ידי העתקת התסריט לנתיב "מיוחד" המאפשר להפעיל אותו בקלות. לדוגמה, אנו יכולים להעתיק אותו אל / usr / sbin ולהריץ אותו מכל מקום מבלי לכלול את הנתיב המלא בו הוא ממוקם:

אנו מעתיקים:

sudo cp miscript.sh / usr / sbin / miscript

אנו מבצעים:

כתב טקסט

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


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   אוסוואלדו וילארואל דיג'ו

    אני מסכים איתך Erpower, גם גרסת המתורגמן וגם דרכה משתנות ולא קבועות, אפילו יותר אם זה נחשב שההפצות של GNU / Linux אינן היחידות המשתמשות ב- Bash (יש גם: freeBSD, OpenSolaris , Mac) ולרבים מהם יש תצורות או מסלולים שונים.

    הדבר החשוב הוא לדעת שיש לך את הגמישות (כפי שציינת היטב) לשחק עם הקריאה לתסריט, עם ./ או עם sh (או פיתון ... וכו ')

  2.   he_who_knows@gmail.com דיג'ו

    בש היא תוכנת מחשב שתפקידה לפרש הזמנות.

    הוא מבוסס על מעטפת יוניקס ותואם POSIX.

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

  3.   דיאנה סי דיג'ו

    שלום, אני מתחיל בשימוש בסקריפטים ואני רוצה לדעת אם מישהו יכול לעזור לי בבעיה שיש לי:

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

    אני לא יודע איך לעשות את זה, אז אם מישהו יכול לעזור לי בזה אני אהיה אסיר תודה.

  4.   בואו נשתמש בלינוקס דיג'ו

    ראה, זה תלוי באיזו שפת תכנות אתה כותב את התסריט. עם זאת, בכל מקרה מה שאתה צריך זה:

    1) אם אתה רוצה שהמשתמש יצטרך להזין את הנתונים בכל פעם שהסקריפט מבוצע, ההליך הנפוץ ביותר הוא שמשתנה יקבל את הערכים שהוזנו בקלט.

    2) במקרה שהערכים תמיד זהים, אתה יכול להשתמש בקבועים.

    3) אפשרות נוספת היא האפשרות שהסקריפט שלך יכול לקחת פרמטרים.

    לחיים! פול.

  5.   בואו נשתמש בלינוקס דיג'ו

    מעניין מה שאתה מזכיר. זה נקרא משתי הצורות: קו שבנג או קו ישיר. אני נותן לך את המידע: http://python.about.com/od/programmingglossary/g/defbangline.htm
    לחיים! פול.

  6.   @llomellamomario דיג'ו

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

  7.   בואו נשתמש בלינוקס דיג'ו

    בסדר. אזכור זאת.
    לחיים! פול.

  8.   בואו נשתמש בלינוקס דיג'ו

    אני שמח שזה עבד. אני תמיד מנסה לפרסם דברים שלדעתי עשויים להיות מעניינים ופרקטיים.
    חיבוק! פול.

  9.   פליקס מנואל בריטו אמארנט דיג'ו

    כל מתכנת עם הרגלים טובים מוסיף "שורת באנג" לשורת הקוד הראשונה. בפייתון אני אף פעם לא שוכח את הקידוד ואת קו המפץ.
    #! / usr / bin / python2.7
    # *. * קידוד = utf-8 *. *

  10.   diex02 דיג'ו

    מצוין, אני מקווה שתוכל לפרסם מידע נוסף על שורת הפקודה, במיוחד כשמדובר בקומפילציה או התקנה מקובצי מקור (tar.gz וכו ').

  11.   ג'ו די קסטרו דיג'ו

    מעולם לא שמעתי על "באנג ליין" תמיד הכרתי אותו כשבנג

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29

    לגבי

  12.   יונתן פרננדז דיג'ו

    הערה מעניינת ... תודה!

  13.   eM Say eM דיג'ו

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

  14.   מריו ריימונדי דיג'ו

    הבהרה שקרתה לי שקשורה לערך הזה: רציתי להתקין גאדג'ט Adobe air (מחשבון סיכויי פוקר). מה שמתקין האוויר של Adobe עושה זה להריץ את הסקריפט המתאים עם "su" אך בצורה ./ מבקש ממך את סיסמת השורש. מכיוון שלסקריפט לא היו הרשאות ביצוע, הוא זרק את ההרשאה שנדחתה, הפיתרון: הפעל את הסקריפט עם sh אם אינך רוצה לשנות את ההרשאות (מהר יותר מאשר לעבור לתיקיית tmp chmod וכל זה). שם התסריט מבוצע, הוא מכנה את מתקין Adobe ועוד דבר פרפר.

  15.   ארו-סנין דיג'ו

    מאמר מעניין מאוד! תודה שעזרת לי לדעת קצת יותר על המסוף. בוא נראה אם ​​תמשיך לפרסם מאמרים כאלה ^^.
    המשיכו כך, זה ללא ספק הבלוג האהוב עלי !!

  16.   erpower דיג'ו

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

    לדוגמא ב- Python, אם ה- shebang הוא #! / Usr / bin / python2.4 התוכנית תפעל אחרת מאשר אם היא #! / Usr / bin / python2.6 או אם היא #! / Usr / bin / python (שהוא בדרך כלל קישור סמלי לגרסת ה- Python המותקנת ומוגדרת כברירת מחדל). זה קורה מכיוון של- Python 2.6 יש פונקציונליות חדשה שלא הייתה קיימת ב- Python 2.4, לכן כתיבת סקריפט המשתמשת בפונקציונליות זו המציינת #! / Usr / bin / python shebang תיכשל אם במערכת מותקן רק פיתון 2.4. במקום זאת, אתה תמיד יכול להכריח את הסקריפט לפעול עם גרסת הפיתון הרצויה על ידי הפעלת אותו עם "python2.4 /path/al/script.py" או "python2.6 /path/al/script.py/

    לגבי סקריפטים של מעטפת, ישנם גם הבדלים בין הקונכיות בהן אתה משתמש, ולכן השימוש ב- #! / Bin / sh ו- #! / Bin / bash יכול לקבל תוצאות שונות בהתאם לתסריט. אם אתה כותב סקריפט באמצעות תכונות שקיימות רק ב- bash אך מציין #! / Bin / sh shebang, הסקריפט שלך כנראה יעבוד על לינוקס (ברוב ההפצות / bin / sh הוא קישור סמלי ל- bash) אך כנראה שהוא ייכשל ב- UNIX אחרים שבהם bash אינו מותקן או כאשר / bin / sh אינו קישור סמלי ל- / bin / bash.

    כמו כן, הקשורים לניידות, יש לקחת בחשבון שהנתיב המצוין בשבנג הוא מוחלט, וישנם פעמים כאשר המתורגמנים מותקנים במקומות אחרים. לדוגמא, מקובל להתקין את מתורגמן הפיתון ב- / usr / local / bin / python אם הורדת וקיבטת Python במקום להשתמש בחבילה מההפצה שלך. אם ה- shebang שלך הוא #! / Usr / bin / python, הסקריפט לא יעבוד על מערכות אלה. כדי לנסות להימנע מבעיות אלה, תוכל להשתמש בתור shebang "#! / Usr / bin / env python" (או "#! / Usr / bin / env sh") כמוסבר ב http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

  17.   בואו נשתמש בלינוקס דיג'ו

    תודה ג'ונתן! טוב לראות שאתה מגיב!
    לחיים! פול.

  18.   אנטוניו דיג'ו

    בשום מקום לא עושה את מה שאני רוצה לדעת, או לפחות אני לא יודע איך להעלות אותו במנוע החיפוש, אני רוצה ליצור סקריפט שמסיבה כלשהי xX מבצע את יכולת הפקודה או את "su" (זה רק דוגמה אבל הם 2 המקרים שאני יכול לחשוב עליהם) ובמקרה של יכולת לפעמים הוא מבקש ממני להזין "יון" או ב"סו "הוא מבקש ממני את הסיסמה ... הייתי רוצה שהתסריט יבחר באפשרויות אלה באופן אוטומטי על ידי העברת פרמטר או באמצעות שיטה כלשהי שהיא אינה מכירה .... תודה על תשומת הלב

    1.    בואו נשתמש בלינוקס דיג'ו

      שלום אנטוניו! אם הבעיה שלך היא להזין את הסיסמה, אני לא חושב שיש פתרון. בדיוק בגלל שזה אמצעי אבטחה, כך שלא כולם יכולים להתקין תוכנית.
      לגבי יכולת וצורך לשים כן, אני חושב שאפשר לפתור את זה. אינני זוכר בשלב זה את הפרמטר המדויק לשימוש, אלא פשוט גלה בדפי האיש. פתח מסוף והזן את הפקודה: man aptitude.
      לְחַבֵּק! פול.

  19.   דייוויד מ"מ דיג'ו

    פוסט טוב מאוד.
    אהבתי במיוחד - בהודעה זו - שהשאלה / ספק שעולה נענת בצורה מאוד ברורה ותמציתית.