Masalahnya di sini bukanlah masalah dengan redirection Linux; melainkan, itu adalah kesalahpahaman mendasar tentang cara kerja pipa. Pengalihan di sini tidak berfungsi karena hanya cut yang benar-benar mencetak ke stdout. stdout untuk perintah echo telah disalurkan ke stdin cut (yang tidak digunakan dalam kasus ini sejak file ditentukan).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
adalah apa yang Anda inginkan, dan tidak tidak berlaku sama sekali (saya mengganti Anda ;
dengan &&
sehingga perintah cut hanya akan mengeksekusi jika header berhasil ditulis; cara ini tidak akan dijalankan jika Anda tidak memiliki izin untuk membuat atau menulis ke output_file ).
Anda juga bisa melakukan semuanya dalam subkulit, mis.
(echo "header line"; cut -c 1-5 input_file) > output_file
tetapi tidak ada manfaat nyata untuk melakukan ini dan dengan contoh yang lebih kompleks dapat menyebabkan masalah jika Anda tidak terbiasa dengan bagaimana subkulit tersebut dicakup.
Jika Anda ingin memotong untuk melewati stdin hingga stdout Anda bisa mencoba:
echo "header line" | cut -c 1-5 - input_file
(Tanda hubung adalah jalan pintas umum untuk stdin)
Namun, ini juga akan melakukan operasi cut pada stdin (menghasilkan baris header "header"). Sulit untuk mengatakan apakah ini yang Anda inginkan atau tidak dari pertanyaan.
{ .... } > some_file 2>&1
(akan "mengkritik" nama_file untuk tidak mengkritik, tapi append untuk itu sebaliknya, hanya mengubah.>
Menjadi>>
:{ ... } >> some_file 2>&1
)Hanya untuk melengkapi jawaban ada eksekutif.
sumber