Mostrando entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando entradas con la etiqueta bash. Mostrar todas las entradas

jueves, 7 de febrero de 2019

Fallo al copiar, mover o borrar múltiples ficheros

Hoy vamos a exponer una situación anómala cuando se intentan eliminar, mover o copiar grandes cantidades de ficheros. Pongamos un ejemplo:
Queremos eliminar todos los archivos de un directorio. Este directorio contiene una cantidad enorme de archivos, por lo que nos encontramos con este fallo:
$ rm -f *
/bin/rm: cannot execute [Argument list too long]
Lo mismo ocurre si hacemos masivamente un cp o mv de estos ficheros.

lunes, 28 de enero de 2019

Fallo al referenciar parámetros a partir de la décima posición

Como se vio en la entrada anterior, donde se explica cómo hacer uso de los parámetros que se le pasan a un script, se puede referenciar a los distintos parámetros de forma individual.
No obstante, surgirán problemas si intentamos referenciar los parámetros a partir de la posición 10.
Veamos un ejemplo:

jueves, 24 de enero de 2019

Variables bash #2

Como dijimos en un post anterior, bash tiene multitud de variables internas que podemos usar en nuestros scripts.
En esta ocasión nos vamos a centrar en las variables relacionadas con el paso de parámetros a nuestro script.

Parámetros

En bash podemos hacer referencia a cada parámetro pasado a un script de forma individual mediante las variables $1, $2, etc, que corresponden con el primer parámetro, segundo parámetro, etc.
Veamos un ejemplo:

lunes, 14 de enero de 2019

Ejecutar funciones bash dentro del comando find

El comando find es muy potente y se usa habitualmente en shell scripts. En ocasiones, se requiere ejecutar una serie de acciones por cada uno de los ficheros encontrados por find y esto puede resultar una tarea imposible. Veamos un ejemplo.
Propósito
Se requiere analizar todos los ficheros con extensión .py ubicados dentro de un directorio para detectar todos aquellos que no contienen la declaración de la codificación de texto utilizada. Para estos ficheros, añadir automáticamente la directiva siguiente:
# -*- coding: latin-1 -*-

lunes, 31 de diciembre de 2018

Reemplazar texto dentro de ficheros

En algunas ocasiones se hace necesario cambiar algún texto dentro de un fichero. En una primera aproximación, se puede usar un fichero temporal para ello:
$ cat fichero | sed "s/Buenos días/Buenas tardes/g" > tmp
$ mv tmp fichero
No obstante, hay una forma más directa y recomendable de realizar este tipo de cambios:

jueves, 27 de diciembre de 2018

Trabajo con ficheros temporales en bash

En esta entrada vamos a ver una buena forma de gestionar los archivos temporales que se crean en los scripts bash.
Inicialmente, un script que requiera la creación de ficheros temporales podría tener la siguiente forma:
#!/usr/bin/env bash

TMPFILE=/tmp/temporal
df -h > $TMPFILE
free -m >> $TMPFILE
LINEAS=$(wc -l $TMPFILE | cut -d " " -f 1)
echo "$LINEAS lineas"
rm -f $TMPFILE

lunes, 10 de diciembre de 2018

Dando color al terminal #3

Como se ha visto en entradas anteriores del blog, se puede dar formato al texto del terminal para hacerlo más atractivo y llamativo de cara al usuario.
Inicialmente hemos visto cómo dar color al texto. Posteriormente, se vio cómo aplicar negrita, cursiva y subrayar el texto. En la entrada de hoy vamos a ampliar los estilos que se pueden usar para dar formato al texto del terminal.

jueves, 6 de diciembre de 2018

Contar lineas idénticas

Hoy voy a plantear una solución sobre cómo realizar un conteo de lineas idénticas salidas de una aplicación o script.
Pongo un ejemplo, pero este método es aplicable a cualquier otro caso.
Objetivo: se quiere conocer cuántos ficheros hay dentro de un directorio por extensión.
El listado de ficheros se puede realizar fácilmente mediante find:
find . -type f -exec basename {} \;
Ahora vamos a quedarnos solo con la extensión:

lunes, 3 de diciembre de 2018

Dando color al terminal #2

Como vimos en una entrada anterior, dando color al terminal, el terminal de Linux no siempre ha de ser negro sobre blanco. Hoy vamos a ver más formas de dar formato al texto del terminal.

jueves, 29 de noviembre de 2018

printf para bash

Bash dispone del comando echo para mostrar texto por el terminal. No obstante, en ocasiones este comando se nos puede quedar corto y se hace excesivamente elaborado formatear ciertas cadenas de texto a nuestro gusto.
Para estos cometidos, el comando interno de bash printf será de gran ayuda dado que funciona de forma bastante similar a printf de C.
Veamos un ejemplo de formateo de texto en forma de tabla:

lunes, 26 de noviembre de 2018

Variables bash #1

Bash tiene multitud de variables internas que permiten obtener una gran variedad de información. Una de ellas es $SECONDS.
Esta variable indica el número de segundos que el proceso bash está en ejecución. Si lo ejecutamos sobre la linea de comandos, obtendremos el tiempo que ese shell lleva en ejecución:
$ echo $SECONDS
292
Si lo ejecutamos dentro de un shell script que use bash, podremos usar esta variable para controlar el tiempo máximo de ejecución del script, ejecutar alguna acción cada x segundos, etc.
#!/usr/bin/env bash

MAXIMO=10

while [ $SECONDS -le $MAXIMO ]
do 

  echo "$SECONDS segundos de ejecucion del script"
  sleep 1

done

jueves, 22 de noviembre de 2018

Dando color al terminal

La consola de Linux permite el uso de colores en el texto para dar un toque distinto a nuestras aplicaciones. Estos colores se activan mediante el uso de códigos de escape ANSI.
Por ejemplo, si se desea escribir un texto en rojo pondríamos lo siguiente:
$ echo -e "\033[31mRojo"
Siendo los caracteres iniciales el código de escape ANSI asociado a dicho color.
Los colores que se pueden usar son los siguientes:
  • Negro: \033[30m
  • Rojo: \033[31m
  • Verde: \033[32m
  • Amarillo: \033[33m
  • Azul: \033[34m
  • Lila: \033[35m
  • Cian: \033[36m
  • Blanco: \033[37m
A continuación se muestra una forma práctica de usar estos códigos de escape:

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.