ทุบตีเป็นเปลือกมี 2 ลำธารคุณสามารถเปลี่ยนเส้นทางที่ข้อมูลออก: stdout และ stderr เพราะความต้องการส่งออกไปยังถูกเปลี่ยนเส้นทางไปที่ไหนสักแห่งลินุกซ์มีเฉพาะ 'ทิ้งทุกอย่าง' โหนดสามารถเข้าถึงได้ผ่าน/ dev / null ทุกสิ่งที่คุณส่งไปนั้นจะหายไปในความว่างเปล่า
(เชลล์มีสตรีมอินพุต แต่ฉันจะไม่สนใจสิ่งนี้ที่นี่เนื่องจากคุณขอให้ระงับเอาต์พุต)
สตรีมเหล่านี้จะถูกแทนด้วยตัวเลข: 1 สำหรับ stdout และ 2 สำหรับ stderr
ดังนั้นหากคุณต้องการเปลี่ยนเส้นทางเพียงแค่ stdout คุณจะทำเช่นนั้นกับตัวดำเนินการ<
และ>
(โดยพื้นฐานแล้วมันจะชี้ไปยังที่ที่ข้อมูลไหลไป)
สมมติว่าเราต้องการที่จะระงับ stdout (เปลี่ยนเส้นทางไปที่ / dev / null):
psql db -f sql.sql > /dev/null
ตามที่คุณเห็นนี่คือ stdout เป็นค่าเริ่มต้นจะไม่มีการใช้หมายเลขสตรีมหากคุณต้องการใช้หมายเลขสตรีมที่คุณเขียน
psql db -f sql.sql 1> /dev/null
ตอนนี้ถ้าคุณต้องการที่จะระงับ stderror (จำนวนสตรีม 2) คุณจะใช้
psql db -f sql.sql 2> /dev/null
คุณสามารถเปลี่ยนเส้นทางสตรีมหนึ่งไปยังสตรีมอื่นได้เช่น stderror to stdout ซึ่งมีประโยชน์หากคุณต้องการบันทึกเอาต์พุตทั้งหมดที่ใดที่หนึ่งเป็นประจำและข้อผิดพลาด
psql db -f sql.sql 2>&1 > log.txt
ใจคุณไม่สามารถมีช่องว่างระหว่าง 2>&1
ในที่สุดและบางครั้งที่น่าสนใจที่สุดคือความจริงที่ว่าคุณสามารถระงับการแสดงผลทั้งหมดโดยใช้&>
สำหรับเมื่อคุณต้องการมัน 'เงียบสนิท'
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
กำจัดมันให้หมด