lunes, 19 de noviembre de 2018

Instrucción vacía

La mayoría de los lenguajes de programación tienen lo que se denomina instrucción vacía. Esta instrucción en realidad no realiza ninguna función práctica, pero permite rellenar un hueco allí donde se necesita.
Veamos un ejemplo en Python:
import sys
try:
    f = open('myfile','r')
except:
    pass
En este ejemplo, si el fichero myfile no existe saltará una excepción que será capturada por el bloque try. Como no se requiere ejecutar ninguna acción si salta la excepción y la sección except hay que colocarla, se pone en ella la instrucción vacía pass de Python.
Veamos cuál es la instrucción vacía en bash y qué usos se le puede dar.

jueves, 15 de noviembre de 2018

bash en modo debug

Bash permite la ejecución de shell scripts bastante potentes. A menudo, este es un recurso muy utilizado por administradores de sistemas para labores de lo más variadas.
A todo el mundo el ocurre en alguna ocasión que un script no hace lo que debería, falla en algún punto y a pesar de revisar el código una y otra vez no se ve el punto de fallo.
Llegados a esta situación, es el momento de añadir comentarios a lo largo del código para intentar acotar el segmento donde se produce el fallo. Un echo dentro del if y otro en el else, para ver por dónde pasa. Y uno más en el bucle para ver las repeticiones que se producen.
Una vez encontrada y corregida la errata, a buscar todos los comentarios que se insertadon para eliminarlos.
Hay un método mucho más fácil para seguir la pista a la ejecución de un script y ver así cuál es su punto de fallo.

lunes, 12 de noviembre de 2018

Manipulación de ficheros que empiezan con un guión

En esta ocasión vamos a ver el tratamiento que hay que dar a los ficheros cuyo nombre comienza con un guión, dado que las técnicas habituales de uso de caracteres de escape para no tratar los caracteres especiales no funcionan.
Veamos un ejemplo clásico:
$ echo "HOLA" > tm?p
$ rm tm\?p
rm: remove regular file 'tm?p'?
Como se observa, el caracter “?” es considerado como un caracter especial, y para referirse a él como un simple caracter y no como un símbolo especial, hay que usar el caracter de escape “\” antecediéndolo.
Sin embargo, esto no ocurre si el nombre del fichero comienza con un guión intermedio:
$ echo "HOLA" > -tmp
$ rm -tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm \-tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm "-tmp"
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
Los errores mostrados indican que el comando usado (rm en este caso, pero puede ser otro cualquiera) considera el guión como el comienzo de un parámetro.
Vamos a ver dos métodos para referirnos a los ficheros que comienzan con un guión.