Newsgroup: it.comp.os.linux.development
Titolo: HELP SHELL SCRIPT

Salve a tutto il NG!
Sono un nuovo utente,e ho un problemino...
 devo fare per esercizio uno script che lanciato dalla $PWD entra
ricorsivamente in tutte
le directory che incontra e salva i path in un file ...
Chiaramente la consegna vuole che nn si utilizzino i vari comandi che
implementano gia la ricorsione
Devo realizzare io il meccanismo ...
Ci sto perdendo la testa !
Grazie a chiunque fornisca info o dritte!

 Grazie a chiunque fornisca info o dritte!
comincia tu, e noi si commentera' i tuoi tentativi.  fare il lavoro
degli altri non e' mica bello.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg


Hai ragione!
dunque ( nn badare troppo alla sintassi nn ho terminali UX da dove
scrivo)
pensavo di fare una cosa del tipo
#!/bin/sh
ls -A | while read file ; do
if test -d $file ; then
echo $file >> LISTADIR   #cosi ottengo la lista delle dir presenti
nella mia PWD
fi
done
(RICORSIONE CHE NN RIESCO A FARE)
cd $(head -n1 LISTADIR)
ls -A | while read....... #Il resto dovrebbe essere piu o meno il
meccanismo che ho usato sopra
Grazie ancora e ciao!
p-s-=E' giusto il quoting?


  ed un banale
DIRS=`find $PWD -type d`
for dir in $DIRS
do
    <quello che vuoi>
done
-- 
AtomicAnt

 AtomicAnt
Grazie ,
ma nella consegna e' espressamente vietato l'uso del comando find e del
comando ls -R!
;-)


find lo puoi usare ??
ciao ..
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 ciao ..
no eh ?? ho letto adesso l'altro post ;-))


 comando ls -R!
La conosci la ricorsivita`? Fai uno script che richiama se stesso...
Non e` troppo complicato. Pero` il tuo sysdmin non ti vedra` piu`
di buon occhio ;-)
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 La conosci la ricorsivita`? Fai uno script che richiama se stesso...
se e' ammessa bash, basta scrivere una funzione che prende come
argomento il nome di una directory; ne esamina i files [1]; e se sono
directories [2], ricorre.  non credo che bash crei un sottoprocesso
per ogni funzione richiamata (o si?) ...
[1] for FILE in `ls $1`
[2] if [ -d $FILE ]


 per ogni funzione richiamata (o si?) ...
Si, crea un nuovo processo (appena provato)...
Tra parentesi: funge.



Ehm...Sulla macchina che ho a disposizione non esiste la bash ne la
csh...posso usare solo la sh standard (e' una macchina unix )---A
questo punto non mi resta che fare uno script che si richiama o fare 2
script?
Grazie!
Ciao


1) sei su ...linux.development e poi dici che non lavori su Linux? Una spia!
2) linux e` unix!
3) il comand "ls -l `which sh`" che ti dice?
4) puoi sempre usare uno script ricorsivo: funge ma e` meno pulito
5) sh e bash sono parenti stretti


1)Su comp.os.unix mi il robot moderatore mi ha scartato il td ;_)
2)Ti ricordo che Gnu is not Unix
3)il path della sh che utilizzo e' /usr/bin/sh
4)Sono d'accordo con te ,per questo infatti sto cercando una soluzione
diversa
5)Credo di si , bash e' la shell reinventata 
Grazie!

 3)il path della sh che utilizzo e' /usr/bin/sh
OK, quindi non sei su bash. Puoi sempre scaricarlo...
Vai sullo script ricorsivo, che sono due - dicasi due - linee. Appena
provato, funge.


 provato, funge.
L'ho migliorato. Sempre due linee. Niente ls. Due echo, un while, un test
e la chiamata ricorsiva. Di meglio credo non si possa fare.
Se potessi farne un alias...


 ls -A | while read file ; do
Perché questa perversione? Non è meglio un for ..do ..done, avendo cra 
di impostare
IFS="
"
-- 
Lorenzo `paulatz' Paulatto
Trieste
``Se Gauss fosse vivo oggi, sarebbe un hacker.''
      --Peter Sarnak (Princeton University)

 "
Col while non devi impostare l'IFS ;-)
Sul serio, che differenza vedi tra il for e il while? Io li uso 50-50. Ma
se ho delle liste con elementi "strani" (leggi: spazi), allora vado sempre
per il while.
Il pipe? Bisogna farlo comunque, quindi... ("for f in `ls -A`; do" crea un
pipe tra l'ls e lo shell)
Ho fatto una versione, sempre 2 linee, 1*echo, 1*ls, 1*pipe, 1*while,
1*test e la ricorsione. Questa versione non si pianta per directories
il cui nome contiene degli spazi. Chi offre di meno?


 Col while non devi impostare l'IFS ;-)
Scusa, avevo provato lo script e mi pareva non funzionasse, in realtà 
funziona, quindi ritiro quanto ho detto.
