سؤال إزالة الإخراج من add-apt-ware


أحاول كتابة نص برمجي من نوع shell يقوم تلقائيًا بإعداد مكدس LAMP. أحد الأسطر الموجودة في النص البرمجي هو:

add-apt-repository -y ppa:ondrej/php5-oldstable >> /tmp/output.txt

لكن جرب كما يمكنني أن أخرج المحتوى التالي دائمًا:

gpg: keyring `/tmp/tmpf0k2tr/secring.gpg' created
etc........

أود أن أكون هناك لا الإخراج لعرضه على الشاشة عند تشغيل هذا الأمر لإضافة هذا ppa إلى مستودع التخزين الخاص بي.


4
2017-09-04 22:27


الأصل




الأجوبة:


استخدم إعادة توجيه الإخراج إلى /dev/null وتشمل stderr انتاج.

add-apt-repository -y ppa:ondrej/php5-oldstable > /dev/null 2>&1
  • ال 2>&1 سيخبر Bash بإعادة التوجيه stderr إلى stdout.
  • ال command > file مقطع سوف يعيد توجيه stdout إلى ملف ، في هذه الحالة /dev/null.
  • /dev/null هو الثقب الأسود لـ Linux - لن تتمكن من استرداد أي شيء من هناك.

النتيجة: التنفيذ الكامل الصامت لأمرك.

في سؤالك المحدث ، يبدو أنك قمت بتسجيل كل المخرجات إلى ملف. في هذه الحالة يمكنك فقط إلحاق 2>&1 إلى خطك الحالي:

add-apt-repository -y ppa:ondrej/php5-oldstable >> /tmp/output.txt 2>&1

هذا لأنك كنت تبحث في stderr تتم طباعة الإخراج على المحطة ، والتي تحتاج إلى إعادة توجيه إلى السجل كذلك (وإلا سوف تفوت على جميع الأخطاء!).


4
2017-09-04 22:34



Braiam يعتمد هذا على الأمر الذي قدمه OP في سؤاله. أفترض أنه يعمل له وخطه يعمل كما root هنا. السؤال هو عن قمع المخرجاتلا حول غير العاملين أمر. - gertvdijk
"stderr إلى stdout" آه! هذه كانت الخدعة. على الرغم من كل الإخراج إلى وحدة التحكم كان هو نفسه. شكرا لتسليط الضوء على أنه ليس كل الإخراج هو نفسه في الواقع. - John Crawford
@ gertvdijk تذكر أن الناس يميلون إلى القيام بالنسخ واللصق دون معرفة كيف وماذا ومتى وأين ، وما إلى ذلك ؛). - Braiam