Vấn đề ở đây không phải là vấn đề với chuyển hướng Linux; đúng hơn, đó là một sự hiểu lầm cơ bản về cách thức hoạt động của đường ống. Chuyển hướng ở đây không hoạt động vì chỉ cắt thực sự in ra thiết bị xuất chuẩn. thiết bị xuất chuẩn cho lệnh echo đã được chuyển sang cắt stdin (không được sử dụng trong trường hợp này vì tệp được chỉ định).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
là những gì bạn muốn và hoàn toàn không phù hợp (Tôi đã thay thế ;
bằng &&
lệnh cắt để chỉ thực hiện nếu tiêu đề được viết thành công; cách này sẽ không thực thi nếu bạn không có quyền tạo hoặc ghi vào output_file ).
Bạn cũng có thể làm tất cả trong một subshell, ví dụ.
(echo "header line"; cut -c 1-5 input_file) > output_file
nhưng không có lợi ích thực sự khi làm điều này và với các ví dụ phức tạp hơn, nó có thể gây ra vấn đề nếu bạn không quen với cách lớp vỏ được phân chia.
Nếu bạn muốn cắt để chuyển stdin qua stdout, bạn có thể thử:
echo "header line" | cut -c 1-5 - input_file
(Dấu gạch ngang là lối tắt phổ biến cho stdin)
Tuy nhiên, điều này cũng sẽ thực hiện thao tác cắt trên stdin (dẫn đến một dòng tiêu đề của "tiêu đề"). Thật khó để nói đây có phải là điều bạn muốn hay không từ câu hỏi.
{ .... } > some_file 2>&1
(sẽ "clobber" some_file không clobber, nhưng append để nó thay vào đó, chỉ cần thay đổi.>
Thành một>>
:{ ... } >> some_file 2>&1
)