martes, 11 de septiembre de 2012

Entendiendo el Shell - Parte 4

Ya nos acercamos a la parte final de esta serie sobre el Shell con esta penúltima entrega. Esta vez estaremos viendo los siguientes aspectos, primero: Redireccionamiento de entrada/salida: El Shell puede redireccionar la entrada, la salida y los errores estándar hacia y desde archivos. En otras palabras, cualquier comando que lea desde la entrada estándar puede tener dicha entrada desde un archivo haciendo uso del operador <.
fraterneo@rainbow:~$ comando < entrada.txt
De la misma forma cualquier comando que escribe en la salida estándar puede enviar su salida a un archivo:
fraterneo@rainbow:~$ comando > salida.txt
En el caso anterior crearía archivo o se reemplazaría todo su contenido con la salida del comando actual
fraterneo@rainbow:~$ comando >> salida.txt
En el caso anterior se agregaría al contenido del archivo la salida del comando actual. La salida de error de los comandos también se puede redireccionar a archivos, mientras tenemos la salida estándar en pantalla. Aunque debemos tener en cuenta que la salida de errores no se genera si el comando se ejecuta satisfactoriamente.
fraterneo@rainbow:~$ comando 2> errores.txt  
Para redireccionar ambos a archivos individuales, lo haremos así:
fraterneo@rainbow:~$ comando > salida.txt 2> errores.txt
O a un solo archivo ambas salidas
fraterneo@rainbow:~$ comando >& salida-errores.txt
Tuberías (Pipes) El Shell nos permite redireccionar la salida estándar de un comando hacia la entrada de otro comando, haciendo uso de las tuberías |, por ejemplo podemos enviar la salida del comando1 como la entrada del comando2.
fraterneo@rainbow:~$ comando1 | comando2
Varias tuberías también funcionan. En un ejemplo más concreto podemos enviar la salida del comando who al comando sort y esta a su vez al comando awk y esta a su vez al paginador less:
fraterneo@rainbow:~$ who | sort | awk '{print $1}' | less
Combinación de comandos Para hacer uso de varios comandos en secuencia en una misma línea, debemos separarlos con punto y coma.
fraterneo@rainbow:~$ comando1 ; comando2 ; comando3
El problema con lo anterior es que si los primeros comandos no se ejecutan apropiadamente y dan un error, los demás se seguirán ejecutando sin hacer caso de eso. En los casos en que el resultado del comando2 dependa del comando1 y así, entonces podemos darle solución a eso usando AND (&&) entre cada comando:
fraterneo@rainbow:~$ comando1 && comando2 && comando3
Otra forma menos común de combinar comandos es haciendo uso de OR (||) entre cada comando. Así cuando uno de los comandos se ejecute satisfactoriamente la ejecución terminará ahí.
fraterneo@rainbow:~$ comando1 || comando2 || comando3
Expresiones entre comillas (Quoting) Normalmente el Shell trata los espacios como separadores de palabras en la línea de comandos. Si queremos manejar palabras con espacios como nombres de archivos con espacios en blanco, simplemente lo encerraremos entre comillas, simples o dobles, para que el Shell lo trate como una unidad. Las comillas simples tratan el contenido de forma literal, mientras que las comillas dobles permiten al Shell tomar valores de variables en la cadena.
fraterneo@rainbow:~$ echo 'El Shell tiene una variable llamada $HOME'
El Shell tiene una variable llamada $HOME
fraterneo@rainbow:~$ echo "Mi directorio home es $HOME"
Mi directorio home es /home/fraterneo
Las comillas inclinadas hacen que el Shell tome lo que hay entre ellas como un comando:
fraterneo@rainbow:~$ echo Mi nombre de usuario es `whoami`
Mi nombre de usuario es fraterneo
Escape de caracteres Si un carácter tiene un significado especial para el Shell pero queremos usarlo de forma literal, debemos escaparlo con la barra inclinada hacia atrás \.
fraterneo@rainbow:~$ echo a\*
a*
fraterneo@rainbow:~$ echo "Mi directorio home es $HOME"
Mi directorio home es /home/fraterneo
fraterneo@rainbow:~$ echo "Mi directorio home es \$HOME"
Mi directorio home es $HOME

No hay comentarios:

Publicar un comentario