19Aug

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

click fraud protection

אם אתה אדם עסוק, אז הדבר האחרון שאתה צריך הוא להיות מוטרד עם כמות עצומה של הודעות "חסר תועלת", אז איך אתה להשקיט את הדברים?היום SuperUser Q & פוסט יש כמה תשובות גדולות לעזור לקורא להשקיט את כמות התפוקה.

השאלה של היום &מפגש תשובה מגיע אלינו באדיבות SuperUser - חלוקה של סטאק שערי, קהילה מונחה קיבוץ של Q & אתרי אינטרנט.

השאלה

קורא הסופר Xster רוצה לדעת כיצד להפעיל פקודה ברקע ללא פלט, אלא אם יש שגיאה:

כיצד ניתן לדכא פלט פקודה, אך להציג אותו אם קודי היציאה של הפקודה הם שגיאה?

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

התשובה

התורמים SuperUser בוב Maximillian Laumeister יש את התשובה עבורנו.ראשית, בוב:

למרבה הצער, ההנחה כי stderr משמש רק עבור פלט השגיאה לא תמיד נכונה.במקום זאת, stderr משמש לעתים קרובות עבור כל פלט אינטראקטיבי ואבחון( כלומר פלט המיועד למשתמש לקרוא בהנחייה אינטראקטיבית).( 1) wget ו- dd דוגמאות מוכרות.

פקודות מסוימות יספקו דגל( כלומר - שקט או - שקוף ) כדי לדכא פלט שאינו שגיאה.קרא את דפי האיש שלהם כדי לראות אם קיים.

כנס נוסף שמכיל לעתים קרובות יותר הוא קוד היציאה

instagram viewer
, תוכנית מחזירה קוד יציאה כאשר הוא יוצא.בדרך כלל קוד היציאה של 0 מציין את ההצלחה, וכל קוד יציאה אחר מציין שגיאה.

עם bash , אתה יכול לקבל את קוד היציאה של הפקודה האחרונה של $ $?משתנה דגים , השתמש במשתנה $ $ .אתה יכול צינור stderr לקובץ זמני רק להדפיס אותו אם מתרחשת שגיאה.לדוגמה, אתה יכול גם להשתמש בקיצורי דרך מסוימים אם אינך מקשר פקודות:

או:

ניתן גם לצינור stdout למאגר זה באמצעות 2 & gt; & 1 & gt;/tmp/ פלט.כן, אתה יכול להשתמש ב mktemp כדי ליצור זמני ייחודייםקובץ. הפעל אותו והקלט את שם הקובץ במשתנה.)

אם אתה צריך להפעיל את כל העניין ברקע של פגז שאתה משתמש בו באופן אינטראקטיבי בו - זמנית, אז עדיף שתכתוב סקריפט שיטפל בוהפלט-הסתרה והפעלת הסקריפט ברקע בטכניקות סטנדרטיות( fish ).לעזאזל, אתה יכול לשים משהו כמו את הפונקציה הבאה ב ~ /.config/fish/ config.fish :

שיחה עם לרוץ-שקט somecommand &( כאשר הנתיב & גורם לה לפעול ברקע)

שים לב כי זה יבלע את קוד היציאה המקורי, ויהיה לזרוק הן stdout ו stderr במקרה של כשל.אתה יכול להתאים אותו לפי הצורך.

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

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

הדרך לעשות זאת( הן bash דגים ) הוא לצרף & gt;/dev/ null לפקודה.זה צינורות stdout לתוך כלום, אבל stdr ( עם הודעות השגיאה שלך) עדיין מגיע אל המסוף.

כך למשל:

הפקודה הד 1 & gt;/dev/ nD אינו מדפיס דבר, מכיוון שפלט הרגיל נדחק, ושום דבר לא נכתב ל- stdr .

הפקודה אדם אינו נוטל & gt;/dev/ מדפיס הודעת שגיאה, כי אדם כותב הודעת השגיאה שלה stdr .

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