mamedu :: varios
mamedu.gif

Programación y linux

varios

15 de Marzo, 2010

Cambiando el contenido de la variable IFS podemos conseguir que el cat <archivo> nos devuelva una linea entera sin tener en cuenta los espacios.

ejemplo:

DIFS="$IFS" # separador fin de linea para que salga linea por linea
IFS=$'\n'
for x in $(cat $PROYECTO | grep -v ^# )
do
can=$(echo $x | awk -v FS="/" '{print $(NF)}')
echo "($conta) $can"
CANCIONES["$conta"]="$can"
let conta=$conta+1
done
IFS="$DIFS"

otro ejemplo:

elegirArchivo()
{
## Nos permite elejir un archivo, recibe como
## argumento el directorio de inicio.
titulo "ELEGIR ARCHIVO"
OPCION="$1"
echo -e "->$cc $OPCION $fc"
eval $imp_linea
while [ -d "$OPCION" ]
do
DOPCION="$OPCION"
DIFS="$IFS" ; IFS=$'\n' # Separador fin de linea
select OPCION in 'Salir' 'Atras' 'Todo el directorio' ${OPCION}/*
do
IFS="$DIFS" # restauramos separador
if [ "$OPCION" = "Atras" ] ; then OPCION=$1 ; fi
if [ "$OPCION" = "Todo el directorio" ] ; then
FILE="$DOPCION"
anadir_directorio $FILE
break
fi
echo -e "->$cc $OPCION $fc"
eval $imp_linea
break
done
done
FILE="$OPCION"

}

Otra forma de hacerlo mas elegante

La solución más sencilla es simplemente cambiar el "for" por un "while" ya que el "while" le asignará a la variable toda la cadena independientemente de que tenga espacios o no, quedaría como sigue:

ls *ogg | while read i ; do
lo_que_sea $i
done

y otra mas:

for i in *; do echo "$i"; done

Sin utilizar ls directamente con el comodín salen los archivos bien.

Ejemplos de if resumido

ejemplo:

acertijo () {
(( " $# == 0 " )) && echo dame un nmr \< 10 && return 0;
[[ ${1:0:1} == ${RANDOM:0:1} ]] && echo ok || echo fallaste
}

Patrones con variables

ejemplo:

set -- /bin/* ; inicio=10 ; final=1 ; echo ${@:inicio:final}

debuelve un rango de valores, empieza en el 10 y le uno solo.

colrm

Elimina las columnas de la 1 a la 20

ejemplo:

ls -l | colrm 1 20

Ubicación real de script

Nos aseguramos que el directorio de la aplicación es realmente el suyo y no el de un enlace simbolico

# Si es un enlace hay que buscar el directorio de programas sobre al que apunta
if [ -L "$0" ] ; then
DIR_PROGRAMAS=$(dirname "`readlink $0`")
else
DIR_PROGRAMAS=$(dirname "$0")
fi

Estamos ejecutando el script o se incluye como una librería

En caso de ejecutarse el script directamente lanzamos función interna.

[[ "`basename $BASH_SOURCE`" = "`basename $0`" ]] && funcion_interna
Últimas entradas en bash
Archivos con espacios en bash

22 de June, 2010

/ Apuntes / Programación / bash

Trabajar con archivos que contienen espacios puede ser un dolor de cabeza con bash. Aquí dejo un ejemplo de como hacerlo. En este ejemplo vamos a buscar los archivos que subversion nos indica que...
varios

15 de Marzo, 2010

/ Apuntes / Programación / bash

Cambiando el contenido de la variable IFS podemos conseguir que el cat <archivo> nos devuelva una linea entera sin tener en cuenta los espacios. ejemplo: DIFS="$IFS" # separador fin de linea...
bash saber si estamos en una consola

13 de February, 2010

/ Apuntes / Programación / bash

if [ `tty` ] ; then echo 'Estamos en consola'else xterm -e "echo No estamos en consola; read" echo 'No estamos en consola'fi Colocando esta linea en la cabecera de un script conseguimos detec...
Cosas útiles con bash

15 de Noviembre, 2009

/ Apuntes / Programación / bash

Listar ficheros abiertos lsoft -p Pid del proceso -u usuario Repetir comandos watch ls Repite el comando constantemente...
zenity

25 de Marzo, 2009

/ Apuntes / Programación / bash

Zenity nos puede servir para aquellos scripts que lanzamos en segundo plano y no vemos la salida que produce el script. Un ejemplo sencillo: #!/bin/bash DIR_MANUAL=/home/eduardo/Documents/doc/progr...
enscript

25 de Septiemre, 2008

/ Apuntes / Programación / bash

Comando de ejemplo para enscript Creación de caratula con listado de las canciones de un directorio  Generamos listado en archivo temporal  ls -R > /tmp/caratula.txt...
Calcular el tiempo de un archivo wav

25 de Septiemre, 2008

/ Apuntes / Programación / bash

ls -la *.wav|awk '{print $9 " " $6}'| awk '{m=($2/10584000)} {printf("%s %2.2fn", $1, m) }' | cut --output-delimiter=" " -d "," -f 1,2 | awk '{s=...
cut

30 de Abril, 2008

/ Apuntes / Programación / bash

Con cut podemos cortar las lineas de un fichero de diferentes maneras: echo "Eduardo Magrané" | cut -c3 # Devuelve el carácter numero 3 (la u) echo "Eduardo Magrané" | cut -d...
Administrar

Nombre:

Contraseña: