كيفية منع كافة المخرجات من أمر باستخدام Bash؟
سؤال
لدي برنامج نصي bash يقوم بتشغيل برنامج به معلمات.يُخرج هذا البرنامج بعض الحالة (فعل هذا، فعل ذلك...).لا يوجد خيار لهذا البرنامج ليكون هادئا.كيف يمكنني منع البرنامج النصي من عرض أي شيء؟
أنا أبحث عن شيء مثل windows "صدى قبالة".
المحلول
وفيما يلي يرسل الإخراج القياسي إلى الجهاز لاغية (بت دلو).
scriptname >/dev/null
وإذا كنت تريد أيضا رسائل الخطأ ليتم إرسالها هناك، استخدم واحد من (الأولى قد لا تعمل في جميع قذائف):
scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null
وإذا كنت ترغب في تسجيل الرسائل ولكن لا نراهم، استبدل /dev/null
مع ملف الفعلي، مثل:
scriptname &>scriptname.out
لاكتمال، تحت ويندوز الملف التنفيذي cmd.exe (حيث "NUL" ما يعادل "/ ديف / لاغية")، هو:
scriptname >nul 2>nul
نصائح أخرى
وشيء من هذا القبيل
script > /dev/null 2>&1
وهذا سيمنع الإخراج القياسي <م> و م> الناتج الخطأ، وإعادة توجيه لهم على حد سواء ل/dev/null
.
وحاول
: $(yourcommand)
و:
هو اختصار ل "لا تفعل شيئا".
و$()
هو مجرد الأمر الخاص.
البديل الذي قد يكون مناسبًا في بعض المواقف هو إسناد نتيجة أمر إلى متغير:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
نظرًا لأن Bash وغيره من مترجمي سطر الأوامر POSIX لا يعتبرون التعيينات المتغيرة بمثابة أمر، فسيتم احترام رمز الإرجاع الخاص بالأمر الحالي.
ملحوظة: تكليف مع typeset
أو declare
تعتبر الكلمة الأساسية بمثابة أمر، لذا فإن رمز الإرجاع الذي تم تقييمه في هذه الحالة هو المهمة نفسها وليس الأمر الذي تم تنفيذه في الغلاف الفرعي:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
ومثل andynormancx آخر استخدام هذا: (إذا كنت تعمل في بيئة يونيكس)
scriptname > /dev/null
وأو يمكنك استخدام هذا: (إذا كنت تعمل في بيئة ويندوز)
scriptname > nul
ألق نظرة على هذا المثال من مشروع توثيق لينكس:
3.6 العينة:ملف stderr وstdout 2
سيؤدي هذا إلى وضع كل مخرجات البرنامج في ملف.يكون هذا مناسبًا أحيانًا لإدخالات cron، إذا كنت تريد تمرير الأمر في صمت تام.
rm -f $(find / -name core) &> /dev/null
ومع ذلك، يمكنك استخدام عملية إعادة التوجيه البسيطة هذه:
/path/to/command &>/dev/null
في لك النصي يمكنك إضافة ما يلي إلى الخطوط التي تعرف ذاهبون لإعطاء الإخراج:
some_code 2>>/dev/null
ووإلا يمكنك أيضا محاولة
some_code >>/dev/null