Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    2

    [bash] Problema con ciclo while e variabili

    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

    codice:
    0  0
    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

  2. #2
    Scusami ma non è più facile un bel

    codice:
     comp_instances=( $(ps faux | grep $DD | grep -v "grep" | awk '{print $2;}') )

    ?
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    La mia ipotesi è che il tuo codice non funzionasse perchè il while dentro alla pipe costringe ad aprire una nuova istanza di bash per valutarlo e quindi un ambiente interno, che non può influenzare quello esterno.
    Non sono sicuro che sia così comunque, se qualcuno ne sa di più interessa sapere anche a me
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  4. #4
    Originariamente inviato da GreyFox86
    La mia ipotesi è che il tuo codice non funzionasse perchè il while dentro alla pipe costringe ad aprire una nuova istanza di bash per valutarlo e quindi un ambiente interno, che non può influenzare quello esterno.
    Non sono sicuro che sia così comunque, se qualcuno ne sa di più interessa sapere anche a me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.