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

Linux Discussion :

portée des variables en shell


Sujet :

Linux

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut portée des variables en shell
    Bonjour,

    J'ai un script shell bash dans lequel je fais une boucle.
    Dans cette boucle, j'aimerais concaténer une chaine avec les différents éléments de ma boucle. Le souci c'est que une fois sortie de ma boucle, ma variable est vide.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        # init chaine attachment
        chAttach=""
     
        # Loop through files
        for image_file in ${FILES[@]}
        do
                chAttach=$chAttach,$image_file
        done
        echo $chAttach
    Je sais pas si je suis très clair....
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Bonjour,

    y a-t-il quelque chose dans ton tableau FILES ?

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci de te pencher sur mon cas...
    Oui il y a quelque chose dans mon tableau. Je vais tout vous dire...
    En fait il s'agit d'un script nautilus de redimensionnement d'image. Or il ne fait que ça et moi je voudrais l'améliorer pour que une fois les images redimensionner, il ouvre thunderbird avec directement les images en pièces jointe....
    Je vous donne le script complet :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    #!/bin/bash
    #
    #  Resize Image Nautilus Script v1.0
    #
    #  A Gnome 2 Nautilus script for resizing images from the context menu
    #  Written by Meinhard Benn (http://benn.org/)
    #  Licensed under the terms of the GNU GPLv3
     
    ###
    # Configuration
    #
     
    # Available image sizes
    #  * first value is default value
    #  * must correspond to script name and symlinks (see README)
    SIZES=(1024 800)
     
    # Image quality in percent
    QUALITY=70
     
    #
    # End of configuration
    ###
     
    # Check if ImageMagick commands are found
    for command in convert identify
    do
        if [ ! $(which $command) ]
        then
            zenity --error --text "Could not find \"$command\" application.\n
    Make sure ImageMagick is installed and \"$command\" is executable."
            exit 1
        fi
    done
     
    # Prevent splitting of $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS on spaces by
    # setthing Bash Internal Field Seperator to newline
    IFS="
    "
     
    # Get file paths
    FILES=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
    FILES_COUNT=${#FILES[@]}
     
    # Process files, if there are any
    if [ $FILES_COUNT -gt 0 ]
    then
        # Use script name to select target size
        for size_option in ${SIZES[@]}
        do
            if [ $(expr match "$(basename "$0")" ".*$size_option.*") -gt 0 ]
            then
                size=$size_option
                break
            else
                # Set to default size
                size=${SIZES[0]}
            fi
        done
     
        # Use plural/singular for progress message
        if [ $FILES_COUNT -gt 1 ]
        then
            file_string="files"
        else
            file_string="file"
        fi
     
        # Initialise progress bar file counter
        current_file=1
     
        # Loop through files
        for image_file in ${FILES[@]}
        do
            # Check if file is an image
            if [ $(identify "$image_file") ]
            then
                # Create image directory if it does not exist yet
                target_dir=$(dirname $image_file)"/"$size"px"
                if [ ! -d $target_dir ]
                then
                    mkdir $target_dir
                fi
     
                # Resize image if it does not exit yet
                target_file=$target_dir"/"$(basename "$image_file")
     
                if [ ! -e "$target_file" ]
                then
                    convert -resize $size"x"$size -quality $QUALITY "$image_file" "$target_file"
                fi
     
                # Send percentage to Zenity progress bar
                percentage=$(echo "$current_file * 100 / $FILES_COUNT" | bc)
                current_file=$((current_file + 1))
                echo $percentage
            fi
        # Pipe loop output to Zenity progress bar
        done | zenity --progress --title="Resizing images" --text="Processing $FILES_COUNT "$file_string"..." --auto-close
    else
        echo "Please run this script via Nautilus (GNOME file manager)"
    fi
    Dans la dernière boucle, je voudrais stocker dans une chaine les noms des images créés séparer par une virgule (ou directement un tableau et après je fais un join par virgule) et après le done, je lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    thunderbird -compose "attachment='$chAttach'"
    Et le tour est joué !!
    Mais ca ne marche pas comme je veux....
    Merci de votre aide.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chAttach="$(printf '%s,' "${FILES[@]}")"
    chAttach="${chAttach%,}"
    thunderbird -compose "attachment='$chAttach'"
    ...
    ?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Merci, mais je voudrais quand même comprendre..
    je ne suis pas expert en shell... perl, php ou même java, ok, mais shell un peu de mal...
    je ne peux pas réutiliser mon tableau ${FILES[@]} car il contient les images avant modifications... c'est pourquoi je voulais concaténer la variable $target_file dans ma variable $chAttach, comme ça je prenais bien les fichiers modifiés
    sinon que signifie chAttach="${chAttach%,}"

    Merci de ton aide

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    OK, donc, dans le script, changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if [ ! -e "$target_file" ]
    then
         convert -resize $size"x"$size -quality $QUALITY "$image_file" "$target_file"
         target_FILES+=($target_file)
    fi
    puis,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    done | zenity --progress --title="Resizing images" --text="Processing $FILES_COUNT "$file_string"..." --auto-close
    chAttach="$(printf '%s,' "${target_FILES[@]}")"
    chAttach="${chAttach%,}" #c'est pour enlever la dernière virgule, qui suit le dernier nom de fichier
    thunderbird -compose "attachment='$chAttach'"
    ...
    ?

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Après un peu d'absence de retour...
    J'ai essayé ta solution N_BaH...
    Je n'ai rien dans la chaine chAttach... du coup ça ne marche pas...
    Faut pas initialiser le tableau target_FILES ?

Discussions similaires

  1. Shell et portée des variables et invocation de fonction via $()
    Par pfxxx dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/04/2015, 20h53
  2. Portée des variables et sous-shell
    Par hacksi dans le forum Linux
    Réponses: 4
    Dernier message: 30/04/2009, 19h55
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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