Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91

    linux[problemi variabili script BASH]

    ciao . ho gia avuto un problema con bash e qualcuno del forum mi ha aiutato a risolverlo. questo però rasenta il ridicolo
    voglio per semplificarmi la vita ciclare in un for usando un valore di una variabile
    dato dall output di un comando


    #!/bin/bash

    #cerco tutti i file con estensione .txt e .png nella home e nelle sottodir
    cd /home/user/

    res=`find . -name "*.txt" -or -name "*.png"`
    dest=/home/user/Desktop/fileTrovati/

    cd Desktop

    mkdir "fileTrovati"



    for i in $res #qui è il problema !
    do
    echo "$i"
    if (test -f "$i")
    then
    echo "file iesimo trovato \n"
    cp $i $dest
    fi
    done



    cd fileTrovati

    for k in *
    do
    echo "$k"
    done




    se utilizzo l output del comando nel for invece che la variabile ,
    for in `find . -name "*.txt" -or -name "*.png"`
    do
    ..

    nessun problema . tutto funziona perfettamente. altrimenti lo script non funziona.

    ho gia fatto ricerche nel web prima di postare , ma nulla

    addirittura
    http://fabriziocelli.altervista.org/guide/linbash.html

    mi dice che è tutto ok

    dove sbaglio?

    grazie

  2. #2
    Temo che il problema siano i file con spazi nel nome che confondono il for... dai un'occhiata qui.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    ciao. scusa , ma se itero direttamente sull output del comando find non dovrebbe essere lo stesso che iterare su una variabile a cui ho assegnato lo stesso output?

    non capisco proprio. come risolvere?

  4. #4
    Il problema è che l'output del comando find (che di default usa il predicato -print) sono i nomi dei file separati da a capi e senza virgolette di sorta, e for, in assenza di virgolette, splitta sul whitespace (spazi, a capi, tabulazioni); per questo motivo se hai dei file con spazi nel nome il for inizierà a fornirti "spezzoni" di nomi di file.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    ciao . ok , ma se itero direttamente sul comando find nessun problema. hai una soluzione?
    credo che sia un problema abbastanza grosso

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    ciao . non ho trovato niente nel forum , ma per un colpo di fortuna dopo 2 giorni ho trovato
    una guida buona nel web

    http://www.cyberciti.biz/tips/handli...s-in-bash.html

    spero possa essere utile a tutti che hanno avuto il mio stesso problema. basta giocare con IFS

  7. #7
    Ecco, allora era la cosa che dicevo io dei suggerimenti elencati lì, ti consiglio di usare quello con -print0 (in modo da essere sicuro che il tuo codice funzioni anche con i nomi file più assurdi).
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.