ปัญหาหนึ่งของคำสั่งแรกคือคุณเปลี่ยนเส้นทาง stderr ไปยังตำแหน่งที่ stdout คือ (ถ้าคุณเปลี่ยน $ เป็น & ตามที่แนะนำในความคิดเห็น) จากนั้นคุณเปลี่ยนเส้นทาง stdout ไปยังไฟล์บันทึก แต่ไม่ดึง stderr ที่เปลี่ยนเส้นทาง . คุณต้องทำตามลำดับอื่นก่อนอื่นให้ส่ง stdout ไปยังตำแหน่งที่คุณต้องการแล้วส่ง stderr ไปยังที่อยู่ stdout ที่อยู่ที่
some_cmd > some_file 2>&1 &
จากนั้นคุณสามารถ & & ส่งเพื่อส่งไปที่พื้นหลัง งานสามารถเข้าถึงได้ด้วยjobs
คำสั่ง jobs
จะแสดงงานที่กำลังดำเนินอยู่และให้หมายเลขแก่คุณ จากนั้นคุณสามารถพูดคุยเกี่ยวกับงานโดยใช้% ตามด้วยหมายเลขที่ชอบkill %1
หรือดังนั้น
นอกจากนี้หากไม่มี & ในตอนท้ายคุณสามารถระงับคำสั่งด้วยCtrlzให้ใช้bg
คำสั่งเพื่อวางไว้ในพื้นหลังและfg
นำกลับมาที่พื้นหน้า ร่วมกับjobs
คำสั่งนี้มีประสิทธิภาพ
เพื่อชี้แจงส่วนด้านบนเกี่ยวกับลำดับที่คุณเขียนคำสั่ง สมมติว่า stderr คือที่อยู่ 1002, stdout คือที่อยู่ 1001 และไฟล์คือ 1008 คำสั่งอ่านจากซ้ายไปขวาดังนั้นสิ่งแรกที่เห็นในของคุณคือการ2>&1
ย้าย stderr ไปยังที่อยู่ 1001 จากนั้นดู> file
ที่ย้าย stdout ไปที่ 1008 แต่คง stderr ที่ 1001 มันไม่ได้ดึงทุกอย่างที่ชี้ไปที่ 1001 และย้ายไปที่ 1008 แต่เพียงแค่อ้างอิง stdout และย้ายไปที่ไฟล์
อีกวิธีหนึ่งคือ stdout ย้ายไปที่ 1008 แล้วย้าย stderr ไปยังจุดที่ stdout ชี้ไปที่ 1008 เช่นกัน วิธีนี้ทั้งคู่สามารถชี้ไปที่ไฟล์เดียว
2>$1
2>&1