[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux_var] bash



On 040713, 13:39, Elena ``of Valhalla'' wrote:
> On 2013-07-04 at 13:18:50 +0200, Cristian Gaiatto wrote:
> > >     choice=whiptail --menu scegli 24 80 10 file1 file1 file2 file2
> > Come alternativa è interessante. Il mio problema è che il comando
> > grep mi dà come risultato un unica stringa contenente i file che ha
> > trovato e non so come "trasformarla" in più dati da assegnare a
> > file1 file2 ecc.
> > Scusa il linguaggio poco tecnico.
> 
> così al volo mi viene in mente:
> 
> stringa="file1 file2"
> whiptail --menu scegli 24 80 10 $(for ITEM in $stringa; do  echo -n
> "$ITEM $ITEM "; done)
> 
> però in effetti in uno script la leggibilità comincia a risentirne
> 

#i nomi dei file potrebbero avere spazi? ti conviene ciclare un array:

files=( "file1" "file2" ... )
whiptail --menu scegli 24 80 10 $(for i in $(seq 0 $(( ${#files[*]}-1 )) ); do echo "${files[$i]}"; done)

#il problema che segnala Christian è però più complesso: se i file hanno spazi nei nomi, i nomi vanno prima riassemblati e identificati come nomi di file, quin#di non è sufficiente scrivere files=( "file1" "file2" ... )
#
#riassemblare i nomi dei file inserendoli in un array, a partire da una stringa (di esempio):

path="/percorso/"
stringa="file con spazi.txt file_senza_spazi.txt"
i=0
for item in $stringa; do
	if [ -f "${path}$item" ]; then
		files[$i]="$item"
		(( i++ ))
	else
		[ ! -z "$cons" ] && item=" $item"
		cons="${cons}$item"
		if [ -f "${path}$cons" ]; then
			files[$i]="$cons"
			(( i++ ))
			unset cons
		fi
	fi
done

#### legge di murphy! (se gli spazi possono occorrere nei nomi dei file, allora occorreranno) 


-- 
Z O N I N O Z
Gianluca Zoni

zoninoz@inventati.org
http://inventati.org/zoninoz
http://savannah.gnu.org/users/zoninoz
_______________________________________________
Talking mailing list
Talking@ml.linuxvar.it
http://ml.linuxvar.it/cgi-bin/mailman/listinfo/talking