En
linux se tiene 3 maneras estandar de mostrar los flujos de
información de entrada y salida, estos son los siguientes:
- Entrada estandar (stdin – Standard Input): generalmente asociada al teclado. Esta representada con el número 0.
- Salida estandar (stdout – Standard Output): usada para mostrar la salida, generalmente la salida por el monitor. Esta representada con el número 1.
- Salida estandar de error (stderr – Standard Error): usada para mostrar los errores de la salida estandar. Esta representada con el número 2.
Se
utilizan los siguientes simbolos para redireccionar la entrada/salida
estandar:
Mayor
que “>”: Redirige la salida estandar,
tambien se puede utilizar de la forma 1>, aunque si se omite el
numero 1, el valor por defecto de la salida es 1.
Menor que “<”: Redirige la entrada estandar.
Menor que “<”: Redirige la entrada estandar.
Utilizar “>>”
para redirigir la salida a un archivo ya existente sin
sobreescribir su contenido.
Veamos algunos ejemplos
para mayor entedimiento:
1)
Redireccionando la salida estandar “>”
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
who
johnny tty7 2012-04-02
13:41 (:0)
johnny pts/0 2012-04-02
13:41 (:0.0)
johnny pts/1 2012-04-02
14:32 (:0.0)
- Redirecciono la salida
estandar a un archivo: usuario_conect.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$who > usuario_conect.txt
Nota:
Si el archivo existe, se sobreescribe el contenido. Si queremos
añadir
la salida a un archivo ya existente utilizar >>.
- Listo el archivo
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat usuario_conect.txt
johnny tty7 2012-04-02
13:41 (:0)
johnny pts/0 2012-04-02
13:41 (:0.0)
johnny pts/1 2012-04-02
14:32 (:0.0)
- Añadiendo
el resultado de la salida estandar al archivo
“usuario_conect.txt”
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls >>
usuario_conect.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat usuario_conect.txt
johnny tty7 2012-04-02
13:41 (:0)
johnny pts/0 2012-04-02
13:41 (:0.0)
johnny pts/1 2012-04-02
14:32 (:0.0)
archivo2
carpeta3
mi_lista
tmp.txt
tmp2.txt
tmpfile
usuario_conect.txt
2)
Redireccionando la entrada estandar “<”
Un ejemplo sencillo que
podemos ver, es contar la cantidad de lineas que posee el archivo
“lineas.txt”
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2/carpeta3$
wc -l < lineas.txt
34
3)
Redireccionando el error estandar “2>”
- La redireccion de stdout no afectara a stderr o stdin.
- Los mensajes de error se muestran en stderr.
- Para redireccionar el error (stderr) a un archivo lo realizamos con 2>.
- La redireccion de stderr no afectara a stdout ni a stdin.
Veamos algunos ejemplos:
- Voy a listar un
archivo que no existe, de formar de producir un error, veamos lo que
pasa.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls dir
ls: cannot access dir: No
such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls dir > error .txt
ls: cannot access dir: No
such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat error .txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
- Vemos
que el archivo error, no contiene nada (La redireccion de stdout no
afectara a stderr ni a stdin)
- Ahora
redireccionamos la salida de error al archivo error.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls dir 2> error.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat error.txt
ls: cannot access dir: No
such file or directory
- "Tambien
podemos enviar añadir la salida de error a un archivo con 2>>
ya existente sin necesidad de sobreescribirlo. Nota:
si lo realizamos de la forma 2> y el archivo existe, se
sobreescribe y si no existe lo genera."
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l mi_casa 2>> error.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat error.txt
ls: cannot access dir: No
such file or directory
ls:
cannot access mi_casa: No such file or directory
-
Existe
un archivo especial llamado /dev/null
para deshacerse de datos indeseados.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l dir 2> /dev/null
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
-
La sentencia anterior indica que si el archivo listado no existe,
que no muestre el error y se deshaga del mismo.
4)
Redireccionando tanto salida estandar (stdout) como error estandar
(stderr) a un solo archivo “&> ó 2>&1”
-
Con la forma &> podemos enviar
tanto el stdout como el stderr a un solo archivo.
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l aa &> secuencia.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat secuencia.txt
ls:
cannot access aa: No such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l aa &>> secuencia.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat secuencia.txt
ls:
cannot access aa: No such file or directory
ls:
cannot access aa: No such file or directory
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l &>> secuencia.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat secuencia.txt
ls:
cannot access aa: No such file or directory
ls:
cannot access aa: No such file or directory
total
36
-rw-r--r--
1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx
2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r--
1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r--
1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r--
1 johnny johnny 566 Apr 2 18:06 registro.txt
-rw-r--r--
1 johnny johnny 102 Apr 2 18:28 secuencia.txt
-rw-r--r--
1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r--
1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt
- Una forma muy usada de listar tanto la salida estandar como la salida de un error a un solo archivo es la siguiente. 2>&1, la cual desvia la salida estándar de errores a la salida estándar, de esta manera podemos tener un archivo en donde se guarden tanto la salida exitosa como la de error de algun srcript en un solo archivo
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
ls -l > registro.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat registro.txt
total
28
-rw-r--r--
1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx
2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r--
1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r--
1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r--
1 johnny johnny 0 Apr 2 18:00 registro.txt
-rw-r--r--
1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r--
1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$ ls -l noexiste >> registro.txt 2>&1
johnny@debianJG:~/Documents/pruebas/carpeta1/carpeta2$
cat registro.txt
total
28
-rw-r--r--
1 johnny johnny 0 Mar 11 12:32 archivo2
drwxrwxrwx
2 johnny johnny 4096 Apr 2 17:28 carpeta3
-rw-r--r--
1 johnny johnny 102 Apr 2 17:58 error.txt
-rw-r--r--
1 johnny johnny 2547 Mar 14 00:15 mi_lista
-rw-r--r--
1 johnny johnny 0 Apr 2 18:00 registro.txt
-rw-r--r--
1 johnny johnny 482 Mar 14 00:41 tmp.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:39 tmp2.txt
-rw-r--r--
1 johnny johnny 346 Mar 14 00:35 tmpfile
-rw-r--r--
1 johnny johnny 211 Apr 2 17:12 usuario_conect.txt
ls:
cannot access noexiste: No such file or directory
Llevaba una semana atascada en un curso porque en mis apuntes no entendía esto... todavía no le veo el fin a redireccionar los errores pero supongo que mas adelante si.
ResponderEliminarAl menos ya lo entiendo!!! Gracias!!
Gracias por comentar, espero te haya servido para aclarar tus dudas.
Eliminargracias
ResponderEliminarSiempre a la orden.
EliminarNJ speeds legal sports betting: 7 top-rated casinos, 8
ResponderEliminarThe New 당진 출장샵 Jersey Lottery 속초 출장샵 said the SuperLotto Plus winner 구리 출장안마 will spend his Wednesday night playing a variety of lottery 광양 출장마사지 games. 의정부 출장마사지