miércoles, 28 de febrero de 2018

¿Jugamos al 'scripting'...?

Desde luego, no tengo ni idea de programación… ni ganas, ni tiempo, para estudiar nada, claro. Pero, acordándome de la ‘Regla de los 5 minutos’ (esa, que se estudia en Relaciones Públicas, que proclama que ‘la gente define su percepción hacia ti en los 5 primeros minutos de la conversación’ y por la que decíamos, en Consultoría, medio en broma, medio en serio, que 'un consultor debe de saber hablar de cualquier tema al menos durante 5 minutos… porque así aseguras que se tenga buena impresión de tus conocimientos') siempre me apeteció hacer algún ‘pinito’.
(y otro buen consejo era el de que teníamos que ser lo suficientemente inteligentes como para saber reírse hasta de uno mismo)

Bueno, en serio: la verdad es que siempre es bueno saber hacer algún que otro ‘programita’, para facilitarte las cosas. Lo que pasa es que yo me considero más intuitivo que 'concienzudo estudiante' (vamos... un 'artihicta'...), y en todo caso ya 'non ho l'età' para ponerme a estudiar programación 'de verdad'… pero si me gusta ingeniármelas para sacar partido de lo que vas aprendiendo, como los scripts, y cosas de esas.
Un script (tomado del inglés, en español, ‘guión’, que la Real Academia lo define perfectamente: “escrito en el que, breve y ordenadamente, se apuntan ideas o cosas con objeto de que sirvan de guías para determinado fin”). Hablando de informática, si sustituimos ‘escrito’ por ‘programa escrito’…  queda todo muy claro ¿no?.

A mi me encanta crear lanzadores, en el Escritorio, para facilitarme las cosas. Que, muy normalmente, solo consiste en crearlos, ponerles el nombre, ‘vestirlos’ con un bonito icono y la orden (o comando) de ejecución desde consola, que suele ser un pequeño script. En mi escritorio tengo varios.
(bueno, algunos son tan sencillos que solo es una orden por consola. Por ejemplo, el de ‘Abrir Bandeja Cds’ es esta orden:
eject /dev/cdrom
y la de cerrar bandeja… ‘eject -t /dev/cdrom’)
Pero la mayoría, como digo, son scripts.

Cómo se crea, y se usa, un script
Los scripts se crean escribiéndolos en un simple editor de textos (gedit, nano...), y se ejecutan por consola. Así que, lo primero, para crear un script, se abre el editor de textos y...
a) Crear la cabecera. Lo primero es decirle al shell qué intérprete debe usar para ejecutar el script. Normalmente, para crear un ‘script en Bash’, se abre un editor de textos y en la primera línea se escribe esto: #!/bin/sh (o mejor... #!/bin/bash) (esta línea se llama, en el 'argot' el shebang)
b) A continuación hay que ir escribiendo el script, o guión, o sea, las líneas con las órdenes e incluso podemos añadir líneas meramente informativas, que debemos empezarlas por una almohadilla (#). Sería, verdaderamente, el 'guión' de lo que hay que ejecutar
c) Finalmente, hay que guardar el archivo. Le daremos un nombre identificativo (normalmente, los llamo ‘script_XX’, aunque a lo mejor es más sencillo identificarlos con la extensión, y guardarlos con la extensión sh: 'XX.sh'
d) Y para ejecutarlos, dos cosas:
Primera: hay que darles permiso de ejecución. Se puede hacer por consola, con la instrucción
chmod -x nombre_script  
o lo podemos hacer, de forma gráfica, con 'botón derecho ratón sobre el archivo del script, ir a Propiedades-Permisos y, allí, marcar la casilla 'Permitir ejecutar el archivo como un programa'
Y segunda, los ejecutamos escribiendo, en consola, la orden...
sh nombre_script 
o, a mi me ha ido mejor, en ciertos scripts...
bash nombre_script

Así, por ejemplo, el de ‘Actualizar en safe_mode’ (que llamo ‘script_actualizar’) es este…
#!/bin/sh
sudo aptitude update
sudo aptitude safe-upgrade
gedit /var/log/aptitude +8000:1
cuyo ‘guión' describe que primero se recarga los repositorios, luego hace el safe-upgrade y finalmente he puesto el invento de ejecutar, con gedit el archivo (log) /var/log/aptitude (que es donde se indican las actualizaciones realizadas y la vers,ión actual, y anterior, de cada paquete actualizado) y que, para verlo cómodamente, se le manda que vaya a la línea 8000, y primera posición del cursor, que la forma de decir que te enseñe las últimas líneas escritas del log, porque ese log suele ser largo.

El otro día, cuando aprendí a manejar el mandato youtube-dl para descargar videos de Youtube, pedí ayuda a mi foro favorito, EspacioLinux.com porque se me ocurría que podría crearse un script, o algo parecido, para facilitar el proceso y no tener que escribir tantos comandos, e historias, en la consola.
Y, con la inapreciable ayuda de mi buen amigo (y gran gurú del foro) ‘neurus’, al final la cosa quedó así:
#!/bin/bash
read -p "introduce (copia y pega) la dirección web de un video: " VIDEO
youtube-dl --list-formats $VIDEO
read -p "Elija un codigo: " COD
youtube-dl -f $COD $VIDEO
# guárdarlo con el nombre de 'script_Videos' y ejecútalo con la orden 'sh script_Videos'
que es muy interesante porque, puesto en un lanzador, solo tienes que copiar y pegar la dirección web del video, y luego, tras enseñarte los formatos que te ofrecen para descargar, escribir el código numérico del formato que elijas... y se descarga el video.
Pero ‘neurus’ me abrió los ojos cuando, al final, me propone que use Zenity… que tiene unas posibilidades que desconocía… e incluso me reescribió, usando esa herramienta 'Zenity', ese script anterior.
Y quedé ‘boquiabierto y ojoplático’ cuando, al ejecutar ese mismo script, lo primero que veo es que en vez de un texto en la consola, me aparece esto…
así que tomo nota para estudiarlo un poco, y seguramente (por aquello de crearme mis propios apuntes) algún día dedique alguna entrada a Zenity en mi Blog… aunque veo por Google que el tema es viejo y que blogueros amigos (que tengo ‘fichados’ para visitarles todos los días, y ver lo nuevo que escriben), ya lo han hecho.

4 comentarios:

  1. Está bueno lo de hacer scripts, así se aprende algo nuevo. Pero si ya vas a usar zenity, lo cual ya te aleja de la consola, yo creo que es más simple directamente utilizar clipgrab que hace lo que tu script y más.
    Ahora si la intención era hacer algo para de paso aprender, pues bienvenido sea.
    Saludos.

    ResponderEliminar
  2. si, mi objetivo, claramente, es aprender cositas (lo de los '5 minutos'), que, aparte de que me entretiene, me sirven para entender mejor algunas cosas que poneis los 'gurus' en los foros, o leo por ahí.
    Y ya me has dado otra 'línea de investigación, lo de 'clipgrab'. Gracias... 'neurus'

    ResponderEliminar
  3. Ahora entiendo tu respuesta es E.L.
    El de arriba, a quien respondes, no soy uo (neurus). Ni vi en mi vida clipgrab.

    ResponderEliminar
  4. Otra cuestión: en debian, /bin/sh es un enlace simbólico a Dash. Que sirve, que funciona, pero no es Bash.

    ResponderEliminar