เปลี่ยนเส้นทางข้อผิดพลาดไปยัง / dev / null เสมอ


22

ฉันรู้ว่าฉันสามารถเปลี่ยนเส้นทางข้อความผิดพลาดจากคำสั่งไปยังการ/dev/nullใช้ไวยากรณ์ต่อไปนี้:

command arg1 arg2 2>/dev/null

แต่มีวิธีการทำเช่นนี้โดยค่าเริ่มต้นเพื่อให้ข้อความแสดงข้อผิดพลาดเสมอไป/dev/nullเว้นแต่ฉันระบุเป็นอย่างอื่น?


1
ในระยะสั้น: ใช่ - เปลี่ยนเส้นทาง / dev / stderr ไปยัง / dev / null แต่ถ้าคุณไม่สามารถเข้าใจได้ด้วยตัวเองคุณไม่ควรลองเพราะคุณมีแนวโน้มที่จะทำลายบางสิ่งบางอย่างที่ร้ายแรงกว่าความสำเร็จ
Benubird

@Benubird stderr! = / dev / stderr การเปลี่ยนเส้นทางไฟล์นั้นจะไม่ทำอะไรเลย ไฟล์ใน / dev / เป็นเพียงเพื่อความสะดวก
Chris Down

@ChrisDown คุณพูดถูก / dev / stderr เป็นแค่ลิงค์ ยังมีอีกหลายกระบวนการที่เขียนลงไปแทนที่จะเป็น fd / 2 ซึ่งคุณสามารถเปลี่ยนเส้นทางได้ มันซับซ้อนมากขึ้นจากตรงนั้น - ซึ่งเป็นเหตุผลว่าทำไมฉันถึงแสดงความคิดเห็นแทนคำตอบ :)
Benubird

คำตอบ:


29

โปรแกรมจำนวนมากส่งเอาต์พุตไปยัง stderr ซึ่งไม่ได้บ่งชี้ข้อผิดพลาดจริง ตัวอย่างเช่นในบางโปรแกรมจะใช้ในการแสดงข้อมูลที่อาจส่งผลกระทบต่อการส่งออกของโปรแกรม (ซึ่งถูกออกแบบมาเพื่อส่งไปยังโปรแกรมอื่น) อย่างไรก็ตามคุณสามารถทำได้:

exec 2>/dev/null

ฉันจะไม่แนะนำให้ทำสิ่งนี้นอกสคริปต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.