# -[ C ]-[ ScripT ]- #========================================================== # # Script per bash che rende + comodo programmare da testuale, rendendo # automatiche certe operazioni ripetitive e macchinose. # Fornisce inoltre altre funzionalita' comode : # - gestisce un sistema di copie di backup dei file editati # - numero di versione e data ultima modifica dei file editati # - gestione di un modello predefinito # # note # # # - per vederne i comandi, lanciare lo script senza opzioni # - la configurazione dello script avviene settando le variabili nella # sezione seguente # - schema di funzionamento : # 1. se nuovo file allora usa modello (se presente) # 2. aggiorna informazioni nel file e crea copie di backup (se abilitato) # 3. edita file # 4. compila file # 5. esegui file o esci # 6. vai a 3 # # # ++[X3ni0n]++ # xenion@libero.it ~ http://www.tba.tsx.org # 7/2/2000 # # #======================================== Configurazione == # modello di riferimento # Il modello e' un file che viene preso come base per i nuovi file modello="$HOME/dev/sources/modello.c" # directory contenente i sorgenti sources="$PWD" # directory contenente le copie di backup dei progetti bkdir="$HOME/dev/backup-projects" # directory contenente gli eseguibili exedir="$HOME/dev/bin-projects" # editor ed="vi" # abilitate\disabilitare la gestione delle copie di backup copiebk="si" # si/no # compilazione automatica comp="si" # si/no # visualizza messaggi in varie occasioni rendendo + chiaro il # funzionamento del programma d3bug="no" # si/no # setta numero di caratteri dell'estensione est=1 # es (.c,.h = 1) (.cpp = 3) #========================================================= clear ################################################## ###### gestione dei dati da riga di comando ###### ################################################## if [ $# = 0 ] then echo "-[ C ]-[ ScripT ]- by xenion@libero.it" echo echo "usage : ./c filename.c -> edita file" echo " ./c -conf -> visualizza configurazione corrente" echo " ./c -remove filename.c -> rimuove completamente il progetto " echo " ./c -linka -> ln -i $0 /bin/c" echo exit fi if [ $1 = "-conf" ] then echo "-[ C ]-[ ScripT ]- by xenion@libero.it" echo echo "[[-*- configurazione corrente -*-]]" echo echo "[-] modello....................: $modello" echo "[-] dir.sorgenti...............: $sources" echo "[-] dir.backup.................: $bkdir" echo "[-] dir.eseguibili.............: $exedir" echo "[-] compilazione automatica....: $comp" echo "[-] gestione copie di backup...: $copiebk" echo "[-] editor predefinito.........: $ed" echo "[-] visualizza messaggi........: $d3bug" echo "[-] N caratteri estensione.....: $est" echo exit fi if [ $1 = "-remove" ] then read -p [-]\ rimuovere\ completamente\ $2\ ?\ \(s\\n\)\ cosa if [ $cosa = "s" ] then rm -fv $2 rm -fv $bkdir/$2.* fi exit fi if [ $1 = "-linka" ] then echo "ln -i $0 /bin/c ..." ln -i $0 /bin/c exit fi est=$[est+1] # deve essere considerato come estensione pure il "." .. ################################################## ###### creazione directory di lavoro ############# ################################################## # se si e' scelto di non avere copie di backup, resta comunque # necessaria la cartella $bkdir per i file temporanei. # si puo' xo' fare bkdir=$PWD risolvendo il problema.. # (i file temporanei vengono sempre rimossi) mkdir $bkdir 2> /dev/null mkdir $exedir 2> /dev/null mkdir $sources 2> /dev/null ################################################## ###### gestione modello e creazione nuovo file ### ################################################## # i file usati con questo script per essere validi devono avere # la prima riga che comincia con "//ver", e' necessario quindi # gestire questo problema. # Si possono presentare 5 casi : # # 1 - nuovo file con modello # 2 - nuovo file senza modello # 3 - file esistente ma non valido perche mai editato con lo script # 4 - file esistente valido (non necessita di essere sistemato ovviamente) # 5 - file che inizia con //ver anche se casualmente. Pazienza, una riga di # commento in meno non uccide nessuno ### gestiamo ora i casi 12 ### echo "[*] inizializzazione file in corso.." if [ ! -r $1 ] then echo " $1 non esiste, controllo se esiste il modello" if [ -r $modello ] then echo " $modello esistente, lo copio in $1" echo "//ver" > $1 cat $modello >> $1 else echo " $modello e $1 non esistono, creo un file valido" echo "//ver" > $1 fi fi ### gestiamo caso 3 ### # se il file esise gia' ma non'e' mai stato editato con lo script # e' necessario inserire una riga all'inizio per dare spazio a # ora\data\versione, evitando cosi di sovrascrivere in parte il file head -n 1 $1 > $bkdir/tmp.file.tmp syn=`grep "//ver" $bkdir/tmp.file.tmp` if [ ${#syn} = 0 ] # se la variabile $syn vale zero non c'e' //ver nella riga 1 then echo " $1 esiste ma non'e' valido, lo sistemo ;)" cat $1 > $bkdir/tmp.file.tmp echo > $1 cat $bkdir/tmp.file.tmp >> $1 fi while [ 1 ] do ################################################## ###### gestione ora\data\versione\copie backup ### ################################################## # vengono inseriti ora\data\versione echo "[*] aggiorno ora\data\versione .." b=`cut -b 41-60 $1 | sed -n 1p` b=$[b+1] a=`wc -l $1 | cut -b 1-8` a=$[$a-1] tail -n $a $1 > $bkdir/tmp.file.tmp echo "//ver [`date`] -- $b" > $1 cat $bkdir/tmp.file.tmp >> $1 if [ $copiebk = "si" ] then cat $1 > $bkdir/$1.backup.$b echo " * copia di backup realizzata" echo " --> $bkdir/$1.backup.$b" fi rm -f $bkdir/tmp.file.tmp echo " * dati aggiornati" if [ $d3bug = "si" ] then read -p [-]\ invio\ per\ procedere\ :\ cosa fi ################################################## ##### modifica file sorgente ##################### ################################################## $ed $1 # edita il file ################################################## ##### gestione compilazione ###################### ################################################## clear es0="$exedir/$1" es=`echo $es0 | head -c $[${#es0}-$est]` if [ $comp = "si" ] then echo "gcc -o $es $1" gcc -o $es $1 > $bkdir/err.$1 2>> $bkdir/err.$1 else echo compilazione automatica disabilitata fi echo "========================================================" echo if [ -s $bkdir/err.$1 ] then echo "* errori in fase di compilazione :" echo cat $bkdir/err.$1 else echo "* nessun errore in fase di compilazione :)" echo "* file output : $es" echo echo " `du -h $exedir`" echo " `du -h $bkdir`" echo " `du -h $es`" fi rm -f $bkdir/err.$1 ################################################## ##### gestione menu ############################## ################################################## echo echo ========================================================[ MENU ] echo echo "e : esegui $es" echo "(ctrl+C) : esci" echo "invio : riedita $1" echo read -p [---------]:\ cosa if [ ${#cosa} != 0 ] then if [ $cosa = "e" ] then echo "=================================" $es echo "=================================" pauseme fi fi echo done #EOF