Il problema qui non è un problema con il reindirizzamento di Linux; piuttosto, è un fraintendimento fondamentale di come funziona la pipeline. Il reindirizzamento qui non funziona perché in realtà solo il taglio sta stampando su stdout. stdout per il comando echo è stato reindirizzato allo stdin di cut (che non viene utilizzato in questo caso poiché viene specificato un file).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
è quello che volete, e non poco elegante a tutti (ho sostituito il vostro ;
con &&
in modo che il comando di taglio verrà eseguito solo se l'intestazione è scritto con successo, in questo modo non verrà eseguito se non si dispone delle autorizzazioni per creare o scrivere output_file ).
Puoi anche fare tutto in una subshell, ad es.
(echo "header line"; cut -c 1-5 input_file) > output_file
ma non vi è alcun vantaggio reale nel fare questo e con esempi più complessi può causare problemi se non si ha familiarità con la definizione della subshell.
Se vuoi che il taglio passi da stdin a stdout puoi provare:
echo "header line" | cut -c 1-5 - input_file
(Il trattino è una scorciatoia comune per stdin)
Tuttavia, ciò eseguirà anche l'operazione di taglio su stdin (risultante in una riga di intestazione di "intestazione"). È difficile dire se questo è quello che vuoi o no dalla domanda.
{ .... } > some_file 2>&1
(sarà "clobber" un_file di non clobber, ma di aggiunta ad esso, invece, basta cambiare il.>
In una>>
:{ ... } >> some_file 2>&1
)