הפנה מחדש את stdout ו- stderr לקובץ

Redirect Stdout Stderr File



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

  • זרם הקלט הסטנדרטי (stdin): 0
  • זרם הפלט הסטנדרטי (stdout): 1
  • זרם השגיאות הסטנדרטי (stderr): 2

בפוסט זה, נתפוס את המידע הנמצא תחת הפניה מחדש של stdout ו- stderr לקובץ.







פלט סטנדרטי (stdout):

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



שגיאת תקן (stderr):

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



הפניית stdout ו- stderr לקובץ:

כיוון שניתוב מחדש הוא שיטה ללכידת פלט תוכנית ולשלוח אותה כקלט לפקודה או לקובץ אחר. ניתן לנתב את זרמי הקלט/פלט על ידי שימוש באופרטור n> כאשר n הוא מספר מתאר הקבצים. לניתוב מחדש של stdout, אנו משתמשים ב- 1> ובשביל stderr, 2> מתווסף כמפעיל.





יצרנו קובץ בשם sample.txt לאחסון הפלט המנותב בספרייה הנוכחית שלנו.



(הפקודה> הקובץ) נחשב לאופרטור הניתוב הקלאסי שמפנה רק את הפלט הסטנדרטי עם שגיאת התקן המוצגת במסוף. נדגים אפשרויות שונות לניתוב מחדש גם של stderr.

הפניית stderr ו- stdout לקבצים נפרדים:

להלן תחביר הפקודה להפניה מחדש של stdout ו- stderr לקבצים נפרדים.

פקודה >הַחוּצָה2>שְׁגִיאָה

הפקודה שלהלן תנתב את הפלט לקובץ החוצה והודעות השגיאה לקובץ השגיאה.

$חתולsample.txt>הַחוּצָה2>שְׁגִיאָה

הפניית stderr ל stdout:

מנהג מקובל להפנות את ה- stderr לפלט הסטנדרטי של תוכנית לאחסון הכל בקובץ יחיד. להלן תחביר הפקודה להפניה מחדש של stderr ל stdout:

פקודה >הַחוּצָה2> &1$ls >samplefile.txt2> &1

$חתולsamplefile.txt

> הפניות החוצה out מפנות את stdout ל samplefile.txt, ו- 2> & 1 ינתב את ה- stderr למיקום הנוכחי של stdout.

אם stderr ינותב תחילה ל- stdout, השתמש בפקודה המפורטת להלן כדי להפנות את ה- stdout לקובץ.

פקודה 2> &1 > קוֹבֶץ$ls -אל ה 2> &1 >samplefile.txt

$חתולsamplefile.txt

&> משמש גם לאותה פונקציונליות שמבצעת 2> & 1.

פקודה &> קוֹבֶץ$ls &>samplefile.txt

$חתולsamplefile.txt

הפניית stdout ו- stderr לקובץ יחיד:

כל הקליפות אינן תומכות בניתוב מחדש של טופס זה, אך bash ו- Zsh תומכות בו. ניתן להפנות את Stdout ו- stderr על ידי שימוש בתחביר הבא.

פקודה &>הַחוּצָה$חתולsample.txt&>הַחוּצָה

בחלק הקרוב של המאמר, נבדוק את הדוגמה הנפרדת לניתוב stdout ו- stderr.

הפניית stdout לקובץ:

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

פקודה > קוֹבֶץ

אנו משתמשים ב- sample.file לאחסון הפלט הסטנדרטי של הפקודה ls -al

$ls -אל ה >sample.txt

$חתולsample.txt

פקודה 1> קוֹבֶץ$ls 1>sample.txt

$חתולsample.txt

הפניית stderr לקובץ:

השתמש באופרטור 2> כדי להפנות את ה- stderr לקובץ.

פקודה 2> קוֹבֶץ $ls -אל ה 2>sample.txt

אנו יכולים לשלב את הביצוע עבור stderr ו- stdout בפקודת ניתוב אחת.

פקודה 2>error.txt1>output.txt

בדוגמה להלן, הודעות השגיאה יאוחסנו ב- error.txt, כאשר output.txt יהיה הפלט הסטנדרטי של הפקודה ls.

$ls 2>error.txt1>output.txt

$חתולoutput.txt

סיכום:

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