IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Exclusion répertoire valeur tableau


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut Exclusion répertoire valeur tableau
    Bonjour à tous !

    Je suis coincé et en cherchant sur différents sites j'ai les réponses mais ne comprend pas pourquoi cela ne fonctionne pas. Je cherche à exclure des répertoires avec ces 2 lignes de codes ci-dessous qui fonctionnent à merveille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exclusion=$(find $dir -type d \( -path ${sources[0]} -o -path ${sources[1]} \) -prune -o -print)
    Maintenant je veux optimiser et donc regrouper les valeurs de la variable "sources" (à l'avenir il se peut que je puisse rajouter des valeurs dans "sources" et plutôt que de rajouter dans "exclusion" ${sources[2]} ${sources[3]} etc) dans celle de "exclusion" j'utilise $"{sources[@]} mais en faisant comme ci-dessous je n'ai plus le même résultat voire cela ne fonctionne plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exclusion=$(find $dir -type d \( -path $"{sources[@]}" \) -prune -o -print)
    J'ai beau cherché partout sur différentes forums Internet mais cela n'aboutit plus.

    Est ce faisable ? si oui Comment faudrait il y parvenir ? ou dois je bien décomposer la ligne de code comme indiqué tout en haut ?

    Par avance merci pour vos conseils

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    -path ne prend qu'un seul argument.

    PS : c'est une erreur de copie $"{ar[@]} au lieu de "${ar[@]}" ?
    PS2 : mettre le résultat d'un find dans une variable plate n'est pas une bonne idée, et mettre une simple substitution de commande dans un tableau aura les mêmes effets potentiellement "pervers"
    comme déjà dit, la réutilisation de la sortie de find doit être pratiquée à partir de -print0.

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    exclude_list=("/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams")
    exclude_args=()
     
    for path in "${exclude_list[@]}"; do
      exclude_args+=("-not" "-path" "$path")
    done
     
    find $dir -type d "${exclude_args[@]}"
    Ca ne fonctionnerait pas ça ?

    Perso, ça, ça passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    exclude_list=("./A ranger/*" "./En cours/*")
    exclude_args=()
     
    for path in "${exclude_list[@]}"; do
      exclude_args+=("-not" "-path" "$path")
    done
     
    find . -type f "${exclude_args[@]}"
    Et si on veut utiliser -prune (qui est plus pratique), chatGPT propose (après plusieurs essais et correction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    exclude_list=("/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams")
    exclude_args=()
     
    for path in "${exclude_list[@]}"; do
      exclude_args+=("-o" "-path" "$path")
    done
     
    find $dir \( "${exclude_args[@]:1}" \) -prune -o -type d -print
    ${exclude_args[@]:1} permet de virer le 1er -o

    et pour éviter bien des soucis et utiliser print0 comme conseillé par N_Bah :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mapfile -td '' exclusion < <(find $dir \( "${exclude_args[@]}" \) -o -type d -print0)

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sources=( "/machin/data/foo  outsftp/user-oasis" "/machin/data/bar outsftp/user-atams" )
    $ bob=( "${sources[@]@Q}" )
    $ bob=( "${bob[@]/#/-not -path }" )
    $ echo "${bob[@]}"
    -not -path '/machin/data/foo  outsftp/user-oasis' -not -path '/machin/data/bar outsftp/user-atams'

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    J'avais essayé des trucs comme ça au début mais sans que ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    sources=( "./Nouveau dossier" "./A ranger" )
    bob=( "${sources[@]@Q}" )
    bob=( "${bob[@]/#/-not -path }" )
    echo "${bob[@]}"
    -not -path './Nouveau dossier' -not -path './A ranger'
     
    find . -type f ${bob[@]}
    find: paths must precede expression: `dossier''
     
    find . -type f "${bob[@]}"
    find: prédicat inconnu «*-not -path './Nouveau dossier'*»
     
    find . -type f "${bob[*]}"
    find: prédicat inconnu «*-not -path './Nouveau dossier' -not -path './A ranger'*»
     
    find . -type f ${bob[*]}
    find: paths must precede expression: `dossier''
    Par contre c'est quoi ce @Q dans ${sources[@]@Q} ?!

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    On peut simplifier avec une seule ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IFSbob=( ${sources[@]/#/-notø-pathø} )
    Pas besoin, a priori, du @Q ( en bash, c'est un operator sur paramètre qui sert à quoter une chaine, voir le § Parameter expansion dans le man)
    Sinon, ici j'utilise ø comme IFS car très peu de chance de le rencontrer dans un nom de fichier ( A part chez N_BaH )
    Et ici, je ne protège pas la variable sources car on est dans un cas ou il ne faut pas le faire

  7. #7
    Invité
    Invité(e)
    Par défaut
    Attention, disedorgue ! tu as modifié globalement l'IFS.

    à part ça, j'ai un problème avec @Q; c'est censé rendre la variable réutilisable*, mais voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ls lorem\ ipsum # le fichier existe
    'lorem ipsum'
    $ v='lorem ipsum'
    $ ls ${v@Q}
    /usr/bin/ls: impossible d'accéder à "'lorem": Aucun fichier ou dossier de ce type
    /usr/bin/ls: impossible d'accéder à "ipsum'": Aucun fichier ou dossier de ce type
    $


    --
    *
    Citation Envoyé par man bash
    Q Le développement est une chaîne qui est la valeur de l'argument protégée dans un format réutilisable en entrée de l'interpréteur.

  8. #8
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Comme N_Bah, ça ne fonctionne pas et du coup le find n'exclue pas les dossiers.

    Pouvez vous m'aider à comprendre :
    Citation Envoyé par man bash
    ${paramètre@opérateur}

    E Le développement est une chaîne qui est la valeur du paramètre avec des suites de caractères de protection par contre-oblique développée comme avec le mécanisme de protection $'...'.

    P Le développement est une chaîne qui est le résultat du développement de la valeur du paramètre comme s'il s'agissait d'une chaîne d'invite (consultez INVITES ci-dessous).

    A Le développement est une chaîne sous la forme d'une affectation ou d'une commande declare qui, lorsqu'elle est évaluée, recréera paramètre avec sa valeur et ses attributs.

    K Produit une version potentiellement protégée de la valeur de l'argument, sauf qu'il affiche les valeurs des tableaux indicés et associatifs comme une séquence de paires clé/valeur protégées (consultez Tableaux ci-dessus).

    a Le développement est une chaîne consistant en valeurs d'indicateur représentant les attributs de paramètre.
    merci

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Bonjour,

    Merci pour vos retours efficaces

    Voici comment j'ai adapté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #######################################################
    #          Informations sur les fichiers
    #######################################################
     
     
    infos_compteurs() {
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" )
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21}"
     
    exclusion=() 
    for path in "${sources[@]}"; do
      exclusion+=("-o" "-path" "$path")
    done
    	echo -e "\e[1;33mIl y a "$(find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print 2>/dev/null | wc -l)" fichiers trouvés dans l'arborescence $dir \e[0m \n\n"
    	echo -e "Les sources exclues de la recherche sont celles-ci : \e[1;33m $sourcesexclues \e[0m \n\n"
    	find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print
    }
     
     
    infos_presence_fichiers() {
     
    	today="$(date '+%s')"
    	while read fic; do
    		datedernieremodific="$(stat --format "%Y" "$fic")"
    		ecart=$((($today - $datedernieremodific) / 86400))
    		echo -e "nom du fichier : $fic"
    		echo -e "date dernier acces du fichier : $(stat --format "%.19x" "$fic")"
    		echo -e "durée de présence en jours : $ecart\n\n"
    		done
    }
     
    ######################################################
    #     Envoi des résultats trouvés vers le log
    ######################################################
     
     
     
    infos_compteurs >> "$log"
    find $exclusion -type f 2>/dev/null | infos_presence_fichiers >> "$log" 
     
    more $log
     
    cp $log /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt | sed -i -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt
    le résultat formaté est ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /machin/data/outsftp/user-ecrft/crft/20220930060142_POCEAD_ECRFT_CRFT.csv
    Le petit bémol est sur cette partie de cette fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    infos_presence_fichiers() {
     
    	today="$(date '+%s')"
    	while read fic; do
    		datedernieremodific="$(stat --format "%Y" "$fic")"
    		ecart=$((($today - $datedernieremodific) / 86400))
    		echo -e "nom du fichier : $fic"
    		echo -e "date dernier acces du fichier : $(stat --format "%.19x" "$fic")"
    		echo -e "durée de présence en jours : $ecart\n\n"
    		done
    }


    je n'ai pu les informations sur les fichiers pour avoir quelque chose qui semblerait à ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom du fichier : /machin/data/outsftp/user-ecrft/crft/20220826061503_POCEAD_ECRFT_CRFT.done
    date dernier acces du fichier : 2022-08-26 09:30:03
    durée de présence en jours : 118
    Comment donc inclure l'action de la fonction dérapante mentionnée

  10. #10
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Re,

    Je pense avoir trouvé quelque chose d'intéressant voici juste 2 petites modifs effectuées au niveau de la couleur jaune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #######################################################
    #          Informations sur les fichiers
    #######################################################
    
    sources=( "/pocead/data/outsftp/user-oasis" "/pocead/data/outsftp/user-atams" )
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21}"
    
    infos_compteurs() {
    
    exclusion=()
    for path in "${sources[@]}"; do
      exclusion+=("-o" "-path" "$path")
    done
    	echo -e "\e[1;33mIl y a "$(find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print 2>/dev/null | wc -l)" fichiers trouvés dans l'arborescence $dir \e[0m \n\n"
    	echo -e "Les sources exclues de la recherche sont celles-ci : \e[1;33m $sourcesexclues \e[0m \n\n"
    	#find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ######################################################
    #     Envoi des résultats trouvés vers le log
    ######################################################
    
    
    
    infos_compteurs >>  "$log"
    
    find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print 2>/dev/null | infos_presence_fichiers >> "$log" 
    
    more $log
    
    cp $log /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt | sed -i -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt

    Quelqu'un pourrait m'expliquer pourquoi justement en faisant ainsi le résultat est celui que je cherchais dans mon message d'avant ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    oups désolé pour la couleur jaune qui n'est pas du tout visible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #######################################################
    #          Informations sur les fichiers
    #######################################################
    
    sources=( "/pocead/data/outsftp/user-oasis" "/pocead/data/outsftp/user-atams" )
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21}"
    
    infos_compteurs() {
    
    exclusion=()
    for path in "${sources[@]}"; do
      exclusion+=("-o" "-path" "$path")
    done
    	echo -e "\e[1;33mIl y a "$(find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print 2>/dev/null | wc -l)" fichiers trouvés dans l'arborescence $dir \e[0m \n\n"
    	echo -e "Les sources exclues de la recherche sont celles-ci : \e[1;33m $sourcesexclues \e[0m \n\n"
    	#find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ######################################################
    #     Envoi des résultats trouvés vers le log
    ######################################################
    
    
    
    infos_compteurs >>  "$log"
    
    find $dir \( "${exclusion[@]:1}" \) -prune -o -type f -print 2>/dev/null | infos_presence_fichiers >> "$log" 
    
    more $log
    
    cp $log /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt | sed -i -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' /home/user-ingest/listerfichiers/logoutsftp/fichierlogoutsftp_saagie.txt

  12. #12
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Maintenant ce qui me pose juste un tout petit souci de détail ce sont ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" )
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21}"
    Résultat :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les sources exclues de la recherche sont celles-ci :  user-oasis ; user-atams
    Imaginons que je veuille rajouter manuellement une 3eme source ou 4, 5 peu importe et que cela soit implémenté directement dans la ligne de code "sourcesexclues"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" "/machin/data/outsftp/user-sirene")
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21} ; ${sources[2]:21} "
    comment l'indiquer ici et éviter de rajouter manuellement mais que cela se fasse automatiquement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sourcesexclues="${sources[0]:21} ; ${sources[1]:21} ; ${sources[2]:21}"
    Je cherche de mon côté et reviens vers vous

  13. #13
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" )
    echo "${sources[@]##*/}"
    # user-oasis user-atams
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "${sources[@]/#*\//; }"
    # ; user-oasis ; user-atams
    x="${sources[@]/#*\//; }"
    echo "${x/#; }"
    # user-oasis ; user-atams

  14. #14
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Merci Hizoka

    Cela fonctionne très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" "/machin/data/outsftp/user-sirene" )
    sourcesexclues="${sources[@]/#*\//; }"
    sourcesexclues1="${sourcesexclues/#; }"

  15. #15
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Pour être le plus propre possible, il faudrait même faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sources=( "/machin/data/outsftp/user-oasis" "/machin/data/outsftp/user-atams" "/machin/data/outsftp/user-sirene" )
    sourcesexclues="${sources[*]/#*\//; }"
    sourcesexclues="${sourcesexclues/#; }"
    [*] et non [@].

  16. #16
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Pour mon problème d'IFS, on peut faire simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ OLDIFS="$IFS" IFSbob=( ${sources[@]/#/-notø-pathø} ) IFS="$OLDIFS"
    En ce qui concerne les parameter@operator comme le @Q , cela fonctionne mais pas comme on l'espère car en fait, quand il est dit que c'est réutilisable en entrée de l'interprêteur, c'est qu'il faut faire une réentrance sur celui-ci via un eval ou un bash -c.
    Le pourquoi du comment est que l'interprêteur n'évalue qu'une fois et donc ici il évalue l'expansion de la variable et non la valeur de la variable (celle-ci ne peut être évaluée que par la réentrance)
    Donc le shell transforme la variable en chaine (ou plusieurs chaine dans le cas d'un tableau) et fourni celle-ci en tant que paramètre à la commande (et en cas de tableau, il fournira autant de paramètre que de chaine que celui-ci contient).

  17. #17
    Invité
    Invité(e)
    Par défaut
    ou simplement (pas testé : avec/sans guillemets ?) : IFS='ø' read -a bob <<<"${sources[@]/#/-notø-pathø}", où l'IFS est modifié pour le seul environnement de read

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    J'avais essayé, mais pas réussi (bon, après j'ai pas forcé non plus) , ça génére soit un champs vide dans le tableau (donc on aura un paramètre vide et find n'aime pas) soit on a un paramètre du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo ${bob[2]}
    ./snap -not
    Et faut comprendre que le passage à une commande ressemblerait à ceci (par exemple pour find) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -not -path "./snap -not" ....

  19. #19
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Merci à tous pour votre aide.
    Je n'ai pas tenté d'expérimenter toutes les propositions mais vous remercie encore pour vos apports constructifs.
    Je vous souhaite à tous d'agréables fêtes de fin d'année ainsi qu'à vos proches et entourage. Merci !

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2013, 16h00
  2. Récupérer valeur tableau crée par vba
    Par Pago dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/05/2010, 22h10
  3. Problème valeur tableau
    Par sepnar dans le forum C
    Réponses: 5
    Dernier message: 15/02/2010, 11h20
  4. Réponses: 7
    Dernier message: 03/05/2008, 00h40
  5. [Tableaux] Lecture répertoire + remplir tableau
    Par Guiona dans le forum Langage
    Réponses: 1
    Dernier message: 19/01/2007, 09h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo