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
redirigestdout
astderr
2>&1
redirigestderr
astdout
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 -
.