Documentos HERE, Servidor FTP temporal y más
TRUCOS
Documentos HERE, Servidor FTP temporal y más
2024-04-12
Por
Tamariz el de la Perdiz

Documentos Here y Líneas HERE

Probablemente conozcas los documentos HERE. Una forma comoda de hacer que nuestros scripts escriban varias lineas en pantalla de una sola vez.

echo << EOM
Esto son varias lineas que podemos imprimir
Todo lo que escribamos hasta la marca aparecera
en la consola
EOM

Tambien los podemos utilizar para generar ficheros cuando no tenemos un editor de textos

cat << EOM  > hola.c
> #include <stdio.h>
> int main(void) { puts("Hola Mundo");}
> EOM

Pero en ocasiones solamente necesitamos una línea. Los siguientes comandos son equivalentes en bash

$ base64 <<< "Codifica esto en base64"
$ echo "Codifica esto en base64" | base64

Finalmente, la sustitución de procesos nos permite utilizar la entrada o la salida de un comando como entrada o salida de otro. La sustitución de procesos crea un pipe con el que redirigir la entrada o salida de procesos. Veamos un par de ejemplos

Un ejemplo clásico del uso de este operador es la comparación de la salida de dos procesos. En general, para poder hacer eso, deberiamos redireccionar la salida de cada proceso a un fichero y luego comparar esos ficheros. Pero en su lugar podemos hacer lo siguiente.

$ diff <(cmd1) <(cmd2)

Observad que no hay espacio entre < y (. De la misma forma podemos redireccionar la salida de un comando

$ echo "Hola mundo" | tee >(md5sum) >(sha256sum)

En este caso el problema esta en que tee espera un fichero como parámetro, no un comando y por lo tanto no podriamos enciar nuestra cadena de texto a los dos programas que calculan el hash.

Lista errores del sistema

Durante el desarrollo de programas en C es normal obtener errores como valores numericos en la variable global errno. Podemos utilizar la función perror para traducirlos en una cadena comprensible para nosotros, o podemos utilizar el comando errno para traducirlos… en caso de que, por ejemplo, el programador de alguna utilidad simplemente nos devuelva un críptico error 10

$ errno -l  # Muestra todos los errores del sistema
$ errno 10  # Muestra descripcion del error 10
ECHILD 10 No child processes
$ errno EAGAIN # Muestra descripcion del error EAGAIN
EAGAIN 11 Resource temporarily unavailable

Si el programa no está instalado, podréis encontrarlo en el paquete moreutils al menos en la distribucion Debian.

Ejecutar comandos desde tu editor de textos sobre documento

Sabias que puedes ejecutar comandos shell sobre bloques de texto que estas editando en vim. Por ejemplo, puedes ordenar alfabeticamente una lista que hayas escrito desordenada en tu documento utilizando el comando:

:%!cmd

El % significa aplicar el comando a todo el fichero, pero tambien podeis usarlo en modo visual.

EN emacs podies hacer lo mismo utilizando el siguiente comando.

CTRL + U  ALT + | cmd

Servidor FTP temporal

Hay muchas formas de transferir ficheros rápidamente entre ordenadores de una red. Aquí os traemos una opción más, utilizando el modulo pyftplib. Poner en marcha un servidor web es tan sencillo como esto.

$ python -m pyftpdlib --directory=FTP --port=2121 --write

Para acceder al servidor utilizad el nombre de usuario anon

Podéis instalar pyftplib con el comando.

$ pip install --user pyftpdlib

Enviar notificaciones al escritorio

A veces tenemos que ejecutar procesos muy largos que pueden tardar mucho tiempo en ejecutarse y estaría bien hacer que alguien nos avise cuando hayan terminado. El comando notify-send nos permite enviar notificaciones al escritorio.

notify-send -t 3000 --icon=video-television "Tus videos ya han sido comprimidos!"

Este comando mostrará durante tres segundo el mensaje que pasamos como parámetro junto aun icono relacionado con el vídeo.

Ejecutar comando cada vez que un fichero cambia

Para conseguir esto podemos utilizar la utilidad ‘inotifywait’ en un bucle como el que se muestra a continuacion. En este caso monitorizamos los eventos de cerrar y escribir en el fichero.

while inotifywait -e close_write document.tex
do
    make
done

Alternativamente podéis utilizar la utilidad entr , la cual también nos permite varias opciones. Consultad la página del manual para todos los detalles. El ejemplo anterior lo podríamos escribir con entr de esta forma:

$ echo document.tex | entr -a make   
$ entr -a make <<< document.tex
Header Image Credits: Vika Glitter

SOBRE Tamariz el de la Perdiz
Tamaríz es un mago de la línea de comandos, un ilusionista de las pipes, un nigromante guardián de las ancestrales herramientas olvidadas por los mortales. Vamos, el tío de la sección de trucos.

 
Tu publicidad aquí :)