Cargando...
Cambios Guardados
¡Error!

Entrega 06. Viva la fontanería.

		% !bluemoon

		bluemoon: Event not found.

Entrada y salida estándar.

Normalmente los comandos usan lo que es conocido como entrada y salida estándar (stdin y stdout respectivamente, lo puedes encontrar en /dev/stdin y /dev/stdout) que no son ni más ni menos que el teclado y la pantalla.

Para ver esto usaremos el siguiente comando:

cat [opciones] [lista_de_ficheros]

'Cat' en sí es un concatenador de ficheros que imprime la salida por la salida estándar, las opciones no las veremos puesto que no son muy interesantes. Nos va a servir para visualizar los ficheros y si escribimos 'cat' sin parámetros leerá de la entrada estándar y escribirá en la salida estándar.


[matados2k@fortaleza curso]$ cat

hola

hola

a

a

todos

todos

[matados2k@fortaleza curso]$

Vemos que sale repetido todo como si 'cat' nos vacilara, simplemente repetirá todo lo que escribamos por que es lo que realmente sabe hacer. Para salir de 'cat' debemos mandarle la señal EOT (End-of-text, fin de texto) y para eso tenemos que usar CTRL+D.

Algunos pensaréis “qué estupidez de comando”, pero sólo hasta que sepáis que con 'cat' se hacen cosas tan curiosas como una imagen ISO de CD sin usar ninguna opción, pero eso será mucho más adelante.

Redirección de salida y entrada.

El intérprete de comandos nos permite redireccionar la salida estándar a un fichero usando el símbolo '>'. Para ver cómo funciona qué mejor que un ejemplo:


[matados2k@fortaleza curso]$ cat > hola_holita

hola

holita

vecinitos

soy ned

[matados2k@fortaleza curso]$ cat hola_holita

hola

holita

vecinitos

soy ned

[matados2k@fortaleza curso]$

Podemos ver que usamos 'cat' con una redirección a un fichero llamado 'hola_holita', podemos ver que no nos ha repetido lo que escribimos puesto que la salida está redireccionada y después visualizamos su contenido con el mismo 'cat'.

La redirección de entrada es similar, sólo que se usa el carácter '<'. Veamos un ejemplo:


[matados2k@fortaleza curso]$ cat < hola_holita

hola

holita

vecinitos

soy ned

[matados2k@fortaleza curso]$

En este ejemplo vemos que el resultado es el mismo y es obvio, ya que esta vez hemos cambiado la entrada estándar por un fichero y la ha sacado por la salida estándar, con lo que ha repetido lo que había en el fichero como si lo tecleásemos y ha terminado ya que los ficheros contienen el carácter EOT o EOF (End of File).

Hay que destacar que la redirección de salida es una redirección destructiva, con esto quiero decir que si no existe el fichero lo crea y si existe lo sobrescribe, y esto puede ser algo que no deseemos.

Redirección de salida no destructiva.

Imaginemos que vamos a hacer una lista de la compra para un piso que tenemos de estudiantes, entonces escribiríamos algo así:


[matados2k@fortaleza curso]$ cat > lista_compra

Champu

Gominolas

Cerveza

Panchitos

jb

[matados2k@fortaleza curso]$

Y se nos olvidan las aspirinas:


[matados2k@fortaleza curso]$ cat > lista_compra

aspirinas

[matados2k@fortaleza curso]$ ls

hola_holita lista_compra perro

[matados2k@fortaleza curso]$ cat lista_compra

aspirinas

[matados2k@fortaleza curso]$

Pues nada ya estropeamos la fiesta, ya que la lista se la dimos a Manolito y sólo nos trajo aspirinas. Para evitar algo tan absurdo y surrealista como esto tenemos la redirección de salida no destructiva, para ello usamos '>>', veamos el ejemplo:


[matados2k@fortaleza curso]$ cat >> lista_compra

Manolito no te olvides de:

Champu

Gominolas

Cerveza

Panchitos

jb

[matados2k@fortaleza curso]$ cat lista_compra

aspirinas

Manolito no te olvides de:

Champu

Gominolas

Cerveza

Panchitos

jb

[matados2k@fortaleza curso]$

Con esto ya nos ahorramos el problema. Supongo que ya habréis deducido ventajas de la redirección aparte de hacer la lista de la compra, ¿no? (tan simples como guardar el listado de 'ls' en un fichero y tan complicado como ahorrarnos teclear en comandos que nos piden muchos datos).

Usando tuberías. Las pipes.

Para lo siguiente vamos a ver otro comando que lo que hace es ordenar lo que le entra y devolverlo ordenado.

sort [opciones] [lista_de_ficheros]

No vamos a ver las opciones por el momento (siempre puedes hacer 'man sort' si te interesa). Veamos antes de todas formas cómo se comporta sort sin opciones:


[matados2k@fortaleza curso]$ sort

peras

limones

piñas

melocotones

(aquí pulsé CTRL+D)

limones

melocotones

peras

piñas

[matados2k@fortaleza curso]$

Observamos que espera a que pulsemos EOT y nos devuelve todo ordenado.

Seria muy interesante poder unir la salida de un programa con la entrada de otro y construir una cadena de órdenes. Imaginaos que en el caso anterior si a Manolito no le ordenamos la lista se pierde (no se molesten los Manolos, pero algún nombre tendría que tener la víctima), lo mejor sería hacer la lista con 'cat', unir la salida con 'sort' y redireccionar al fichero donde queremos guardarlo, y para eso usamos el carácter '|' (la del AltGr +1). Lo que hacemos con ese símbolo es crear una pipe, que es como ya expliqué unir la salida de un comando con la entrada de otro. Mejor un ejemplo:


[matados2k@fortaleza curso]$ cat < lista_compra | sort > nueva_lista

[matados2k@fortaleza curso]$ cat nueva_lista

aspirinas

Cerveza

Champu

Gominolas

jb

Manolito no te olvides de:

Panchitos

[matados2k@fortaleza curso]$

Observamos que redireccionamos la entrada de 'cat' con la lista ya creada y construimos una pipe para unir la salida de 'cat' con la entrada de 'sort' y terminamos redireccionando la salida a un nuevo fichero. Con lo que conseguimos la lista ordenada, que si bien podíamos haber hecho lo mismo con 'sort < lista_compra > nueva_lista' tenía que hacerlo de la otra forma para explicarlo.

Despedida.

Ya con esto terminamos, y para la próxima entrega nos tocan los permisos de los ficheros y la creación de enlaces.

Agradecimientos: · Revisión del documento: karuchi (Carolina García).

Página oficial y dominio de mi propiedad http://matados2k.es

Matados'2k Usuario y moderador de foro.noticias3d.com

Matados'2k Usuario y moderador de www.sinuh.org

matados2k (arroba) gmail (punto) com


Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.




1

Añadir comentario

Por favor, escribe a continuación el texto de la siguiente imagen

Artículos Relacionados