Bash

script

Tutto il software contenuto in questa pagina e' libero se non diversamente specificato; potete ridistribuirlo e/o modificarlo sotto i termini della GNU General Public License versione 2, come pubblicato dalla Free Software Foundation.

Questi programmi sono distribuiti con l'intento che possano essere utili, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita che servano allo scopo per cui sono stati creati. Vedere la GNU Genral Public License per maggiori dettagli.


Home
Hardware
Software
Lab

call2dot.sh

Durante lo sviluppo dei programmi puo' essere importante tenere sotto controllo le dipendenze dei file o la sequenza delle chiamate, soprattutto quando i file sorgente cominciano ad esplodere e moltiplicarsi senza sosta.

Questo script utilizza awk per tradurre in grafico la sequenza delle chiamate prodotte da cflow.

calltree-0.01.tar.gz

include_tree.sh

Una cosa che ho cercato per molto tempo e' il grafo delle dipendenze in un programma C. In realta' non ho trovato una risposta chiara, ma dopo diversi anni sono riuscito a produrre la mia personale risposta a questo problema.

Lo scopo del gioco e' produrre il grafo delle dipendeze, cioe' degli include tra i vari file. Una tecnica molto semplice utilizza un opportuno mix di grep e di sed. Il primo estrae tutte le righe #include dai file sorgente, mentre il secondo aggiusta la sintassi perche' sia digeribile da dot (sempre li si va a cadere).

Dot richiede delle righe del tipo:

    "file_1" -> "file_2";

Questo per indicare che il file_1 include il file_2.

Il risultato e' uno script di questo tipo:

    #!/bin/bash
    grep include *.c *.h |sed -En 's/^(.*)\.[ch]:#include \"(.*)\.h\".*$/  \"\1\" -> \"\2\";/p'
      

Tutte le inclusioni fatte da pippo.c e da pippo.h vengono attribuite al modulo pippo. Solo gli include con le virgolette vengono estratte dai file, tutte le inclusioni fatte con gli apici vengono ignorate; un potenziamento di questo script sarebbe attribuire un colore differente ai file inclusi tramite apici.

A parer mio l'analisi delle dipendenze dei file e' importante per capire se un progetto e' strutturato bene o se semplicemente gli include vengono fatti a caso, tanto funziona ugualmente!!!
Qui ci muoviamo in un campo minato perche' ogniuno ha le proprie idee, io sono del parere che se ci sono dei percorsi chiusi nel grafo delle dipendenze del tipo: A -> B -> A o A -> B -> C -> A, allora c'e' qualcosa che non va. Non dico che ci sia per forza di cose un problema, probabilmente la cosa e' piu' che giustificata, ma io rimetteri quantomeno in discussione le scelte progettuali.

Rinominare elenchi di file

Questi sono due trucchi molto utili per rinominare molti file all'interno della stessa directory.

    $ for i in $( ls ProgettoElektor_*.pdf ); do n=$( echo $i |sed 's/ProgettoElektor_//' ); echo "$i ==> $n"; mv -i $i $n; done
      

Nel caso in cui i nomi originali contengano degli spazi il gioco si complica leggermente:

    $ SAVEIFS=$IFS; IFS=$(echo -en "\n\b"); for i in $( ls -1 Ele*.pdf ); do n=$( echo $i |cut -d ' ' -f3 ); echo "$i ==> $n"; mv -i $i $n; done; IFS=$SAVEIFS
      

La variabile IFS contiene un elenco di caratteri utilizzati da bash per delimitare i campi, solitamente contiene anche uno spazio.


Questo sito e' stato realizzato interamente con vim.
Grazie a tutta la comunita' open source, alla free software foundation e chiunque scriva software libero.