Saltar a contenido

Introduccion

Interprete Bash

Para entender como funcionan las ejecuciones a traves del interprete Bash vamos a ver unos conceptos basicos:

1.Codigos de retorno de ejecucion de scripts

Todos los comandos unix tienen un codigo de finalizado de ejecucion (Status), para saber el comando del ultimo comando ejecutado escribimos

$ echo "hola"
hola
$ echo $?
0

es lo mismo que $ echo “hola”| echo $? El codigo 0 indica que su status es que termino correctamente.

2.Codigos de error de ejecucion de scripts

Si por ejemplo ejecutamos algo que de error, por ejemplo un comando que no exista:

$ asdioeie
asdioeie: orden no encontrada
$ echo $?
127
Por defecto si no se indica, el output de ejecucion se hace a stdout y stderr:

  • El digito 1 indica que se ha escrito en stdout
  • El digito 2 indica que se ha escrito en stderr

Por eso vemos que indica que se ha escrito en la consola normal y por detras tambien se ha escrito en stderr.

3.Escribiendo el output de ejecucion a un archivo

Podemos escribir el resultado de ejecucion en un archivo con >

$ echo "hola" > output.txt
dpena@dpena:~$ cat ./output.txt 
hola
Pero al > podemos indicar que tipo de salida queremos, por ejemplo:

stdout y stderr

Como recuerdas 1 perteneces stdout y 2 perteneces a stderr

Por lo tanto sii escribimos 1> nos escribira lo que fuera a stout en el archivo output.txt

$ echo "hola" 1> output.txt
$ cat ./output.txt 
hola
Si por el contrario lo que queremos capturar es el error usariamos 2 (sterr)

$ echo "hola" 2> output.txt
hola
~$ cat ./output.txt 
El archivo esta vacio,ya que la ejecucion no escribio en sterr ya que no hubo error.

4. /dev/null , ¿Que es?

/dev/null es un archivo que tienen todos los sistemas unix y que es un archivo que se descarta automaticamente su contenido.

Es muy util para leer la ejecucion de comandos (que hemos visto anteriormente)

Por ejemplo si escribo un comando propenso a error,

$ grep -r hello /sys/ 
grep: /sys/devices/system/clockevents/power/autosuspend_delay_ms: Error de entrada/salida
grep: /sys/devices/system/clockevents/clockevent6/unbind_device: Permiso denegado
....
....
etc..
En este caso printeara mucho error en consola, asi que podemos decirle que el sterr lo saque a un archivo, en este caso a dev/null ya que no nos interesa revisar el error, simplemente fallo y no nos interesa mirar mas.

$ grep -r hello /sys/ 2> /dev/null
$ 
Mucho mejor la salida , no es tan verbose.

Tambien podemos escuchar solo los resultados negativos haciendo que los resultados correctos (los que irian a stout vayan a /dev/null y asi los descartamos), por ejemplo:

$ ping google.com 1> /dev/null
solo mostrara cuando el ping este fallando

Si queremos que todas las salidas (stout y sterr sean ignoradas podemos usar el wildcard $> )

$ grep -r hello /sys/ &> /dev/null

Podemos probar una url sin guardar el cambio, usando la salida a /dev/null por ejemplo

$ wget -O /dev/null http://miserver.com/arhivoloquesea
No consumira espacio en disco ya que todo ira a dev/null