El problema aquí no es un problema con la redirección de Linux; más bien, es un malentendido fundamental de cómo funciona la tubería. La redirección aquí no funciona porque solo el corte se imprime en stdout. stdout para el comando echo se ha canalizado al stdin de cut (que no se usa en este caso ya que se especifica un archivo).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
es lo que quiere, y no poco elegante en absoluto (que sustituye el ;
de &&
manera que el comando de corte sólo se ejecutará si el encabezado se escribe correctamente, de esta manera no se ejecutará si no tiene permisos para crear o escribir a output_file )
También puede hacerlo todo en una subshell, por ejemplo.
(echo "header line"; cut -c 1-5 input_file) > output_file
pero no hay ningún beneficio real al hacerlo y con ejemplos más complejos puede causar problemas si no está familiarizado con el alcance de la subshell.
Si desea cortar para pasar stdin a stdout, puede intentar:
echo "header line" | cut -c 1-5 - input_file
(El guión es un atajo común para stdin)
Sin embargo, esto también realizará la operación de corte en stdin (lo que da como resultado una línea de encabezado de "encabezado"). Es difícil saber si esto es lo que quieres o no de la pregunta.
{ .... } > some_file 2>&1
(se "clobber" some_file a no daban un golpe, pero anexados para que en su lugar, sólo cambia el.>
En una>>
:{ ... } >> some_file 2>&1
)Solo para completar las respuestas hay un ejecutivo.
fuente