Ciao a tutti,
ho un problema con un mio script bash che non riesco a risolvere. Si tratta di uno script che legge un file e mette la seconda parola di ogni riga dentro un array per poi elaborarlo. Lo script è il seguente:
codice:
declare -a comp_instances=()
declare -i count=0
ps faux|grep $DD|grep -v grep|
while read line; do
comp_instances[${#comp_instances[*]}]=$(echo $line | awk '{print $2}')
((count++))
echo "${#comp_instances[*]} ${comp_instances[@]}"
done
echo "${#comp_instances[*]} ${comp_instances[@]} $count"
Lasciando stare cosa fa lo script, il problema riguarda il ciclo for e il fatto che i contenuti inseriti nell'array comp_instances vengono inseriti dentro una variabile dal nome comp_instances che però, una volta concluso il ciclo while, risulta vuota. Per capirci, nell'array di sopra, l'echo dentro il while stampa una cosa del tipo:
codice:
1 12590
2 12590 12670
3 12590 12670 12733
4 12590 12670 12733 12232
5 12590 12670 12733 12232 32390
mentre l'ultima riga, quell'echo fuori dal ciclo while, stampa
Il problema è strano perchè le variabili in bash sono tutte globali che io sappia (a meno che di un local davanti, ma dentro funzioni comunque) e quindi gli elementi inseriti dentro comp_instances dovrebbero essere inseriti nell'array comp_instances dichiarato all'inizio. La cosa strana è che anche senza usare un array il problema rimane: se provo ad usare una stringa e a separare ogni pid con uno spazio, la variabile che contiene tutti i pid viene correttamente elaborata dentro il ciclo while, ma risulta vuota quando questo finisce.
Qualcuno sa gentilmente cosa sto sbagliando?
Grazie,
Rief