ปัญหาที่นี่ไม่มีปัญหากับการเปลี่ยนเส้นทางของ Linux ค่อนข้างเป็นความเข้าใจผิดขั้นพื้นฐานของวิธีการทำงานของไปป์ไลน์ การเปลี่ยนเส้นทางที่นี่ไม่ได้ทำงานเพราะเพียงตัดเป็นจริงการพิมพ์ที่ stdout stdout สำหรับคำสั่ง echo ถูกไพพ์ไปยัง stdin ของ cut (ซึ่งไม่ได้ใช้ในกรณีนี้เนื่องจากไฟล์ถูกระบุ)
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
คือสิ่งที่คุณต้องการและไม่ไม่เกี่ยวข้องเลย (ฉันแทนที่;ด้วย&&ดังนั้นคำสั่ง cut จะดำเนินการเฉพาะเมื่อส่วนหัวถูกเขียนสำเร็จวิธีนี้จะไม่ทำงานหากคุณไม่มีสิทธิ์ในการสร้างหรือเขียนไปยัง output_file )
คุณสามารถทำได้ทุกอย่างใน subshell เช่น
(echo "header line"; cut -c 1-5 input_file) > output_file
แต่ไม่มีประโยชน์อย่างแท้จริงในการทำสิ่งนี้และด้วยตัวอย่างที่ซับซ้อนมากขึ้นอาจทำให้เกิดปัญหาได้หากคุณไม่คุ้นเคยกับวิธีการกำหนดขอบเขตย่อย
หากคุณต้องการให้ cut เพื่อส่ง stdin ไปยัง stdout คุณสามารถลอง:
echo "header line" | cut -c 1-5 - input_file
(เส้นประเป็นทางลัดทั่วไปสำหรับ stdin)
อย่างไรก็ตามสิ่งนี้จะทำการตัดบน stdin (ทำให้บรรทัดส่วนหัวของ "header") เป็นการยากที่จะบอกว่านี่คือสิ่งที่คุณต้องการหรือไม่จากคำถาม
{ .... } > some_file 2>&1( "จะข่มขี่" some_file ไม่ข่มขี่ แต่ผนวกกับมันแทนเพียงแค่เปลี่ยน.>เป็น>>:{ ... } >> some_file 2>&1)