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