איך אתה מפעיל פקודה ברקע ללא פלט אלא אם כן יש שגיאה?
אם אתה אדם עסוק, אז הדבר האחרון שאתה צריך הוא להיות מוטרד עם כמות עצומה של הודעות 'חסר תועלת', אז איך אתה להשקיט את הדברים? היום SuperUser של Q & A לכתוב יש כמה תשובות גדולות לעזור לקורא להשקיט את כמות הפלט.
מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ מונחה על ידי הקהילה של אתרי אינטרנט של Q & A.
השאלה
SuperUser הקורא Xster רוצה לדעת איך להפעיל פקודה ברקע ללא פלט אלא אם כן יש שגיאה:
כיצד ניתן לדכא פלט של פקודה, אך הצג אותו אם היציאה של הפקודה מוצגת שגיאה?
איך אתה מקבל פקודה לרוץ ברקע ללא פלט אלא אם כן יש שגיאה?
התשובה
תורמים SuperUser בוב ו Maximillian Laumeister יש את התשובה עבורנו. ראשית, בוב:
למרבה הצער, ההנחה כי סטדר משמש רק עבור פלט השגיאה לא תמיד נכונה. במקום זאת, סטדר משמש לעתים קרובות עבור כל פלט אינטראקטיבי ואבחון (כלומר פלט המיועד למשתמש לקריאה בהנחייה אינטראקטיבית).(1) wget ו ד הן דוגמאות ידועות.
פקודות מסוימות יספקו דגל (כלומר. -שקט או -שקט) כדי לדכא פלט שאינו שגיאה. קרא את דפי האיש שלהם כדי לראות אם קיים.
מוסכמה אחרת היא לעתים קרובות יותר קוד יציאה, תוכנית מחזירה קוד יציאה כאשר היא יוצאת. בדרך כלל(2), קוד יציאה של 0 מציין הצלחה, וכל קוד יציאה אחר מציין שגיאה.
עם באש, אתה יכול לקבל את קוד היציאה של הפקודה האחרונה $? משתנה. ב דג, להשתמש ב $ $ משתנה. אתה יכול צינור סטדר לקובץ זמני ורק להדפיס אותו אם מתרחשת שגיאה. לדוגמה (דג)
ניתן גם להשתמש בקיצורי דרך מסוימים אם אינך מחבר פקודות:
או
אתה יכול גם צינור סטדוט לאותו מאגר באמצעות שימוש 2> 1> / tmp / outputbuffer.
(הערה: אני לא ממש יודעת דג, אז אני מתאים את הקונספט למה שאני יכול למצוא בתיעוד שלו. התחביר עלול לטעות מעט. כמו כן, ניתן להשתמש mktemp כדי ליצור קובץ זמני ייחודי. הפעל אותו והקלט את שם הקובץ במשתנה.)
אם אתה צריך להפעיל את כל העניין ברקע של פגז כי אתה גם באמצעות אינטראקטיבי באותו זמן, אז אתה עדיף את כתיבת סקריפט לטפל פלט מתחבא ולהפעיל את התסריט ברקע עם טכניקות סטנדרטיות (דג). לעזאזל, אתה יכול לשים משהו כמו הפונקציה הבאה ~ / .config / fish / config.fishYou
להתקשר עם Run-silent somecommand & (שם נגרר & גורם לו לרוץ ברקע)
שים לב כי זה יהיה לבלוע את קוד היציאה המקורי, וכן לזרוק את שניהם סטדוט ו סטדר במקרה של כישלון. ניתן להתאים אותו לפי הצורך.
(1) אין ערובה לכך שפלט השגיאה לא יופיע סטדוט, כמה תוכניות יהיה לזרוק את כל הפלט שם!
(2) למרבה הצער, זה עדיין לא תמיד כך. קוד היציאה נשלט לחלוטין על ידי התוכנית וחלק יציין כמה תנאי הצלחה עם יציאות לא אפס. שוב, לבדוק את המדריך.
ואחריו התשובה מקסימיליאן לאומייסטר:
כלי שירות של יוניקס שולחים הודעות כלליות אל סטדוט, ו הודעות שגיאה סטדר, אז אם אנחנו רק רוצים לראות הודעות שגיאה, אז זה יהיה מספיק כדי לדכא סטדוט כך בלבד סטדר מקבל פלט אל המסוף.
הדרך לעשות זאת (בשניהם באש ו דג) הוא לצרף > / dev / null אל הפקודה. זה צינורות סטדוט אל האין, אבל סטדר (עם הודעות השגיאה שלך) עדיין מגיע אל המסוף.
כך למשל:
הפקודה הד 1> / dev / null לא מדפיסה כלום, כי נורמלי סטדוט פלט הוא מדוכא, ושום דבר לא נכתב סטדר.
הפקודה האדם אינו פועל> / dev / null מדפיס הודעת שגיאה, מכיוון איש כותב את הודעת השגיאה שלה סטדר.
יש לך משהו להוסיף להסבר? נשמע את ההערות. רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי מתמצא? בדוק את נושא הדיון המלא כאן.