ברוך הבא לעוד יום שישי ...
הגיע הזמן להכיר חלק זעיר מהטרמינל. לאחר מחשבה רבה החלטתי ליצור פוסט בנושא זרמים סטנדרטיים; למרות שזה יהיה שטחי, אני חושב שזה משהו שכולם צריכים לדעת.
זרם סטנדרטי
זרם סטנדרטי הוא מורכב ממספר ערוצי תקשורת בין המשתמש למסוף. "ערוצי" קלט / פלט אלה מציגים או לוכדים מידע בעת ביצוע פקודה.
3 חיבורי ה- I / O הם: סטדין קלט סטנדרטי, stdout תפוקה רגילה, סטדרר שגיאה רגילה.
stdin: קלט סטנדרטי
קלט סטנדרטי הוא הדרך בה אנו לוכדים מידע מפקודה, דרך צינורות, הפניה מחדש, מקלדת וכו '. אנו מזהים אותו עם מתאר הקבצים 0.
דוגמה ל 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 לקובץ
- בין היתר
זהו זה היום אנשים. אנו קוראים ומודים לך שעברת במקום. 😀
מעניין. בזכות ההדרכות שלך אני מחבב את Bash הרבה יותר.
יקר, מעניין, אולם יש לך שגיאה בשורה הבאה:
"וכאשר מפנים את הקובץ לפקודת ls", זה צריך להיות "וכאשר מפנים את הקובץ לפקודת המיון".
ברכה.
יש שגיאה בתחילת הטקסט, כאשר אתה מציין את הפקודה "ls", היא צריכה להיות "מיין":
"זה לוקח את כל המידע שנמצא ברשימה - במקרה זה המספרים שנכתבו באופן אקראי - וכאשר מפנים את הקובץ לפקודה ls (כאן זה יהיה סוג)"
ברכות ותודה על שיתוף בעבודתך
זה נהדר עבור cron, שם אתה רוצה שהפלט יישטף (/ dev / null), אך השגיאות יישמרו בקבצים. כמו כן, כשאני עושה זאת, אני בדרך כלל משתמש בפקודת תאריך כדי לציין בדיוק מתי הם נכשלו.
ל- Bash (sh) כלים אלה שפותחו כל כך על ידי פילוסופיית יוניקס "עשו דבר אחד, ועשו זאת טוב"
ובכן לא גיליתי דבר
האה טוב זה מוסבר די טוב, מה לא הבנת?