Reentrantni funkce v bash -lze ?
Marek Kdolský
KdolskyM na seznam.cz
Čtvrtek Duben 29 09:37:05 CEST 2004
Bude to tim ze vsechny promenne jsou v bashi globalni pokud ve funkci nereknes
jinak (local).
Mozna pro inspiraci. Uz sem to do konference daval, akorat ted nevym do ktere.
Mozna to bude mit trosku problemy se nazvy souboru ktere obsahuji mezeru.
===================================================================================
[marys na ic0385 tmp]$ cat wav2mp3
#!/bin/bash
action_wav(){
echo "$i -> $DST_FILE";
trap_start;
lame $i $DST_FILE;
trap_stop;
}
action_others(){
echo "$i -> $DST_FILE";
trap_start;
cp "$i" "$DST_FILE";
trap_stop;
}
showdirs()
{
for i in $SRC_DIR_TMP/* ; do
if [ -d "$i" ] ; then
DST_DIR_TMP=${DST_DIR}${i##$SRC_DIR};
if ! [ -d "$DST_DIR_TMP" ] ; then # kontrola existence
adresare v cilovem adresari, pripadne jeho vytvoreni
echo "vytvarim adresar: $DST_DIR_TMP";
mkdir $DST_DIR_TMP;
fi
SRC_DIR_TMP=${i};
showdirs;
else
DST_FILE="${DST_DIR}${i##$SRC_DIR}";
SRC_FILE=$i;
case ${SRC_FILE##*.} in # rozdeleni akci podle pripon
[Ww][Aa][Vv]) if ! [ -f "$DST_FILE" ]; then action_wav; fi;;
# akce s wav soubory
* ) if ! [ -f "$DST_FILE" ]; then action_others; fi;;
# akce s ostatnimi soubory
esac
fi
done
}
end_error(){
rm -f $DST_FILE;
echo "Nestandardni konec, mazu docasne soubory"
exit 1;
}
trap_start(){
trap end_error INT HUP TERM QUIT;
}
trap_stop(){
trap - INT HUP TERM QUIT;
}
===================================================================================
SRC_DIR=${1:-"/home/marys/Develop"}; # nacteni parametru
DST_DIR=${2:-"/tmp/dst"};
if ! [ -d "$SRC_DIR" ] || ! [ -d "$DST_DIR" ]; then
echo "Neexistuje zdrojovy nebo cilovy adresar";
exit 1;
fi
SRC_DIR_TMP="$SRC_DIR";
showdirs;
exit 0;
Další informace o konferenci Linux