Redirección

Input/output

> sirve para redirigir el output a un archivo, o para crearlo directamente; >> sirve para añadirlo al output sin borrar las lineas previas.

Se puede dirigir el standard error con 2>; solo se redirige el output que es un error.

Hay dos formas de redirigir tanto el standard error y standard output. La primera funciona en todas las versiones de shell y utiliza 2>&1 como argumento; por ejemplo

ls -l /Desktop > file.txt 2>&1

(solamente funciona si el output ha sido redirigido previamente con >).

En bash se puede utilizar &> en lugar de >. Para eliminar únicamente el output error se puede utilizar un bit bucket, que acepta output pero no hace nada con el - /dev/null:

$ ls -l /bin/usr 2> /dev/null

En resumen: 2> redirige el STDERR, > es igual a 1> y se refiere a STDOUT. < es STDIN.

Redirección Descripción
< stdin - dirige el contenido de un archivo al comando (a veces es implícito, como en less file.txt
> o 1> stdout a un archivo (lo reescribe)
>> stdout añade las líneas a un archivo sin reescribir
2> stderr
&> stdout y stderr
  • 1>&2 redirige stdout a stderr
  • 2>&1 redirige stderr a stdout

Read from file con exec

El siguiente script utiliza el constructo read (ver aquí) de manera que se acepta como input el archivo que se pasa como primer argumento:

#!/bin/sh

exec 0<$1
counter=1

while read line; do
  echo "$counter: $line"
  counter=$((counter + 1))
done

exec 0<$1 significa que el argumento $1 del script sirve para definir el input, siemrpre que exista el archivo.

Pipes

| permite pasar el output de un comando al input de otro. Cuando el segundo acepta otros argumentos el stdout anterior puede representarse como -.