ตามที่ " ลินุกซ์: อ้างอิงสมบูรณ์ Edition 6 " (. หน้า 44) คุณสามารถท่อเท่านั้น STDERR โดยใช้|&
สัญลักษณ์การเปลี่ยนเส้นทาง
ฉันได้เขียนสคริปต์เพื่อทดสอบสิ่งนี้:
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
ฉันรันสคริปต์นี้เช่นนี้:
./script.sh |& sed 's:^:\t:'
สันนิษฐานว่ามีเพียงบรรทัดที่พิมพ์ไปยัง STDERR เท่านั้นที่จะถูกเยื้อง อย่างไรก็ตามมันใช้งานไม่ได้จริง ๆ อย่างที่ฉันเห็น:
Normal Text.
Error Text.
ฉันทำอะไรผิดที่นี่
./script.sh > /tmp/stdout_goes_here |& grep 'grepping_script_stderr'
ไม่ได้ทำงานตามที่ตั้งใจไว้คือ: การเปลี่ยนเส้นทางscript.sh
'sstdout
(ซึ่งเป็นไปตามข้อมูลคู่มือควรจะเกิดขึ้นเป็นครั้งแรก) จากนั้นช่วยให้การประมวลผลของสคริปต์grep
stderr
แทนstderr
และ tdout` ทั้งคู่จบลงด้วยstdout_goes_here