Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Testo dellelaborato
Si vuole realizzare uno script bash che consenta un semplice versionamento di copie di backup di file di testo. se!uendo lo script" apparira# il se!uente menu# interattivo: 1. init$repo 2. commit 3. remove 4. revert %. status 6. file&search 'l comportamento per ciascuna voce del menu deve essere il se!uente. 'l comando init-repo prende un parametro repo" e crea nella director( corrente due sotto$director( chiamate: )repo> e ).repo.bck>. Quest#ultima risultera# *uindi nascosta" a causa del punto all#inizio del nome. +a director( )repo> sara# usata per modificare i file" mentre *uella nascosta ,).repo.bck>- sara# usata per il backup dei file. sempio: se come parametro repo sara# passato my_program" verranno create le se!uenti director(: my_program .my_program.bck
'l comando commit funziona come se!ue. .ato in input il nome di un repo ,)repo/-" per ogni file <filename> contenuto in )repo/ o in una sotto$director( di )repo/" si confronta il file corrispondente presente in ).repo.bck/ con lo stesso path relativo a partire da ) repo/. Se tale file non esiste" si provvede a crearlo copiando ) filename/ da )repo/ o una sua sotto$director(" avendo cura di preservare la stessa struttura di sotto$director( a partire da ) repo/ anche in ).repo.bck/. Se invece tale file esiste" si procede come se!ue: Se il contenuto del file e# stato modificato rispetto alla copia presente in ).repo.bck/" allora il file modificato verra# copiato in ).repo.bck//)filename/. 0ltrimenti" poiche# il contenuto del file non e# stato modificato" non e# necessario salvare un#ulteriore copia.
sempio: supponiamo che la director( my_program conten!a la director( src" con dentro un file chiamato pippo.c. 0llora: 1. +a prima volta che si da# il comando commit" dentro .my_program.bck/ viene creata la
director( src" e dentro src viene copiato il file pippo.c. 2. Se poi riese!uo immediatamente il comando commit" allora lo script non fara# nulla" perche# la copia di pippo.c in .my_program.bck/src e# !ia# u!uale alla versione in my_program/src. 3. Se invece modifico il contenuto del file pippo.c" e poi riese!uo il comando commit" allora il file my_program/src/pippo.c sara# copiato in .my_program.bck/src. 'l comando remove prende come parametro un file presente in )repo/" e lo rimuove sia dalla cartella )repo/ che dalla cartella ).repo.bck/. 'l comando revert prende )repo/ e un nome di file come parametro opzionale. Se tale parametro e# presente" la copia di backup del file passato come parametro deve essere ripristinata da ).repo.bck/ in )repo/. 'n altre parole" il file passato come parametro verra# copiato dalla cartella ).repo.bck/ alla cartella )repo/. Se invece non viene fornito alcun parametro" allora verranno ripristinate tutte le copie di backup. 1uesto si!nifica che o!ni file contenuto nella director( )repo/ o in una sotto$ director( di )repo/ verra# ripristinata utilizzando la copia presente in ).repo.bck/. 'l comando status, dato )repo/" stampa a video il nome di tutti i file in ) repo/ o in una sua sotto$ director( il cui contenuto e# diverso dalla copia di backup presente in ).repo.bck/. 'nfine il comando file_search prende come parametro una strin!a di testo pattern. 2ale strin!a verra# ricercata all#interno di tutti i file presenti nella director( )repo/ o in una sotto$director( di )repo/. +#output prodotto dal comando sara# una lista ordinata di tutti i file che conten!ono pattern all#interno del loro contenuto. 3el caso in cui un file conten!a piu# occorrenze di pattern" *uesto apparira# nella lista solo una volta. ' file devono essere indicati con il loro path relativo rispetto alla director( )repo/. +#ordine della lista e# il tradizionale ordine alfanumerico. sempio: supponiamo che il pattern 4ricerca5 sia presente all#interno dei file leggimi.txt e varie/pippo.txt nella director( )repo/" l#output dovra# essere il se!uente: ./leggimi.txt ./varie/pippo.txt
FAQ
1. ! possibile inserire il co"ice su script separati, oppure bisogna usare le fun#ioni$ 1uesta decisione 6 lasciata allo studente" che pu7 sce!liere il modo pi8 opportuno. 9 *uindi possibile sviluppare il pro!ramma inserendo il codice su funzioni oppure su file separati. 2. ! possibile usare il coman"o comm/sed/a%k/etc.$ S:. 1ualsiasi comando bash 6 consentito" anche se non spie!ato a lezione. +o studente e# pero# tenuto a conoscere i comandi che usa nel codice. 3on 6 lecito usare script in altri lin!ua!!i" *uali ad esempio ;erl o 2<+. 3.=.: 2utto *uanto non esplicitato in *uesto documento pu7 essere implementato liberamente.