טרמינל שישי: סטרים סטנדרטי

ברוך הבא לעוד יום שישי ...

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

זרם סטנדרטי

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

תרשים מהיר בזרמים סטנדרטיים.

תרשים מהיר בזרמים סטנדרטיים.

3 חיבורי ה- I / O הם: סטדין קלט סטנדרטי, stdout תפוקה רגילה, סטדרר שגיאה רגילה.

stdin: קלט סטנדרטי

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

המתאר מהווה אינדיקטור לגישה - במקרה זה - לערוצי הקלט והפלט. אלו הם ערכי int, בדרך כלל 0, 1 ו -2.

דוגמה ל stdin תהיה:

מיין <רישום

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

stdout: פלט רגיל

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

עכשיו אני אנסה ליצור אינסטינציה של stdin ו- stdout עם תסריט שנכתב בבאש, פשוט כי אני אוהב באש האהה. 🙂

test.sh

#! / bin / bash אם [-t 0]; ואז מהדהד "אתה משתמש ב- stdout" elif [-t 1]; ואז הד "אתה משתמש ב- stdin" אחרת מהדהד "שגיאה אכזרית" fi

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

test test.sh ls | bash test.sh bash test.sh </ etc / passwd
התסריט המדובר ותוצריו ...

התסריט המדובר ותוצריו ...

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

stderr: שגיאה סטנדרטית

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

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

ls> info.txt

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

במקום זאת אם נשתמש ב- 2> כדי לציין שמירה של stderr בקובץ:

ls foo 2> info.txt

עכשיו זה ישמור את פרטי השגיאה בקובץ הטקסט.

רוב פָּגָז אפשר לאחסן את stderr ו- stdout בפקודת פקודה אחת עם &> כאשר Foo הוא ספריה לא קיימת

ls הורדות Foo &> info.txt

קובץ זה יכיל את פרטי השגיאה בעת ביצוע ls ב- Foo ויפרט את הספריות תחת הורדות.

ולבסוף, מה זה מפורסם 2> & 1?

פשוט, הפנה מחדש את הסדר ל- stdout. זה & באמצע> ו 1 פירושו שהוא ינותב מחדש ל stdout. אם זה לא היה שם, זה היה משהו כמו ... "להפנות את השגיאה לקובץ 1".

ועם זה ניתן להפנות מחדש:

  • stdout לקובץ
  • stderr לקובץ
  • stdout ל stderr
  • stderr to stdout
  • stderr ו- stdout לקובץ
  • בין היתר

זהו זה היום אנשים. אנו קוראים ומודים לך שעברת במקום. 😀


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

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

*

*

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

  1.   אליוטיים 3000 דיג'ו

    מעניין. בזכות ההדרכות שלך אני מחבב את Bash הרבה יותר.

  2.   קווינסי מגו דיג'ו

    יקר, מעניין, אולם יש לך שגיאה בשורה הבאה:

    "וכאשר מפנים את הקובץ לפקודת ls", זה צריך להיות "וכאשר מפנים את הקובץ לפקודת המיון".

    ברכה.

  3.   מיגל דיג'ו

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

    ברכות ותודה על שיתוף בעבודתך

  4.   מטייל דיג'ו

    זה נהדר עבור cron, שם אתה רוצה שהפלט יישטף (/ dev / null), אך השגיאות יישמרו בקבצים. כמו כן, כשאני עושה זאת, אני בדרך כלל משתמש בפקודת תאריך כדי לציין בדיוק מתי הם נכשלו.

    ל- Bash (sh) כלים אלה שפותחו כל כך על ידי פילוסופיית יוניקס "עשו דבר אחד, ועשו זאת טוב"

  5.   לולו דיג'ו

    ובכן לא גיליתי דבר

    1.    קוֹל דיג'ו

      האה טוב זה מוסבר די טוב, מה לא הבנת?