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 POSIX Discussion :

Quelles vérifications suite à téléchargement via CVS [KSH]


Sujet :

Shell et commandes POSIX

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Quelles vérifications suite à téléchargement via CVS
    Bonjour,

    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
     check_xenocara() {
         RETVAL=""
         XDIR="/usr/xenocara"
         if [ $(ls $XDIR | wc -l) -ne 0 ]; then
             RETVAL=1
         else
             RETVAL=2
         fi
     }
     
     fetch_xenocara() {
         XDIR="/usr"
         while true; do
             echo -n "Fetch xenocara? (y/n) [y] "
             read answer
             case $answer in
             ""|y|Y)
                check_xenocara
            if [ "$RETVAL" -eq 1 ]; then
                echo "*** Error: xenocara is already there!"
            else
                    cd $XDIR && cvs -qd anoncvs@example.tld:/cvs checkout -rOPENBSD_6_3 -P xenocara
                    if [ $? -eq 0 ]; then
                        echo "==› Xenocara fetched successfully."
                    else
                        echo "*** Error: unable to fetch xenocara from CVS server! Try later."
                    fi
            fi
                return 0
                ;;
            n|N)
                    echo "GoodBye!"
                break
                ;;
              *)
                echo "$answer: is not allowed!"
                ;;
             esac
         done
     }
    Je dispose de deux fonctions:

    • check_xenocara: vérifie le contenu de destination /usr/xenocara.
    • fetch_xenocara: récupère le code source de xenocara.

    Je cherche à vérifier que tout le code source soit téléchargé si par mes gardes, je relance la deuxième fonction.

    Pour le moment, via la première, je vérifie simplement si le répertoire est vide ou pas.

    Je me suis dit, pourquoi ne pas réaliser un test sur le nombre de fichier mais invérifiable étant donné que celui-ci sera différent dans les prochaines versions.

    Une idée m'a tout de même traversée l'esprit, créer un fichier vide dans /usr/xenocara dès que le téléchargement est terminé et faire un test sur celui-ci.

    Qu'en pensez-vous ?

    En vous remerciant par avance de vos suggestions
    .Olivier

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

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

    Citation Envoyé par N_BaH
    on n'utilise pas ls dans un script.

    les noms des variables doivent ne pas être tout en majuscules.
    un fonction peut retourner un code d'erreur =>
    Code bash : 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
    shopt -s nullglob
     
    check()
    {
       local dir="$1/repertoire"
       declare -a listF=( "$dir/"* )
       ((${#listF[*]})) && return 0 || return 1
    }
     
    fetch()
    {
       dir=/chemin/abs
       if check "$dir"
       then
          : do stuff
       else
          : do not do stuff
       fi
    }
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Merci N_BaH pour ces informations

    Je vais tester tout ça et regarder si cela fonctionne avec ksh.
    .Olivier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    non, ça ne fonctionnera pas, en tout cas pas tel quel.

    pourquoi ksh ? quel ksh ? sur quelle distribution ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Peut être avec find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check(){
      test "$(find $1 -empty)"
    }
    check "/usr/xenocara" && echo vide || echo plein
    Cordialement.

  6. #6
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    pourquoi ksh ?
    C'est mon choix
    quel ksh ?
    v5.2.14
    sur quelle distribution/système d'exploitation ?
    OpenBSD

    Je me doute bien qu'un code bash ne fonctionnera pas avec ksh.

    J'ai trouvé un exemple en ksh que je suis entrain de tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ -e $dir/* ] || [ -e $dir/.[!.]* ]
    on n'utilise pas ls dans un script.
    Pourquoi ?
    .Olivier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    parce que ça incite à faire ce que tu as fait, et que ça peut donner des résultats erronés; ce dont prémunit l'emploi des globs.

    v5.2.14
    ça ne dit pas quel KSH. ksh93 ? mksh ? ...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Ce numéro de version ne peut à priori correspondre qu'à du pdksh. En tout cas, ce n'est pas du ksh88 ou ksh93.
    ɹǝsn *sıɹɐlos*

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    parce que ça incite à faire ce que tu as fait, et que ça peut donner des résultats erronés; ce dont prémunit l'emploi des globs.
    Je vois.
    Ce numéro de version ne peut à priori correspondre qu'à du pdksh. En tout cas, ce n'est pas du ksh88 ou ksh93.
    Oui c'est pdksh.

    En tout cas merci, pour l'info concernant le renvoit d'un code erreur par le bais d'une fonction car je n'y avais pas pensé.

    Du coup, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check_status() {
        xdir="/usr/xenocara"
        ([ -e $xdir/.* ] || [ -e $xdir/* ]) && return 0 || return 1
    }
    .Olivier

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Il y a un problème avec -e $xdir/.*. C'est strictement équivalent à -d $xdir, car si le répertoire existe, il y a au moins les entrées . et .. dedans et ce n'est sûrement pas ce que tu souhaites tester.

    Tu peux plutôt mettre -f qui ignore les répertoires et autres fichiers spéciaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check_status() {
        xdir=/usr/xenocara
        [ -f "$xdir"/.* -o -f "$xdir"/* ]
    }
    J'ai aussi supprimé le sous-shell (parenthèses) et la fin && return 0 || return 1 qui ne servent à rien.
    ɹǝsn *sıɹɐlos*

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    et s'il y a plusieurs fichiers, pdksh ne va pas substituer la liste aux astérisques, ou le test ne va pas les interpréter comme des arguments en trop ?

    et, finalement, si le code n'est pas réutilisé, une fonction est-elle bien nécessaire ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Oui, ça ne fonctionne que dans des cas très simples.

    S'il y a plusieurs fichiers, seul le premier est pris en compte donc si un répertoire existe et qu'il est listé avant un fichier, le test échoue alors qu'il devrait réussir. S'il y a plusieurs fichiers cachés, le deuxième test est ignoré...

    En fait, l'exemple déjà trouvé fonctionne plutôt bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check_status() {
        xdir=/usr/xenocara
        [ -e "$xdir"/* ] || [ -e "$xdir"/.[!.]* ]
    }
    Il ne détecte cependant pas les fichiers dont le nom commence par deux points, par exemple ..test, mais bon, ce n'est pas courant...
    ɹǝsn *sıɹɐlos*

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    comme je le disais, si il y a plus d'un fichier dans le répertoire testé, le shell sort une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ echo $KSH_VERSION
    @(#)PD KSH v5.2.14.2 99/07/13.2
    $ set -x
    $ [ -e ./* ]
    + [ -e ./Desktop ./Downloads ./Images ./Téléchargements ./firefox.core ./my_lspci ./suspend ]
    ksh: [: ./Downloads: unexpected operator/operand
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Ah oui, pdksh n'émule pas correctement le vrai ksh qui ignore les arguments en trop...
    ɹǝsn *sıɹɐlos*

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Bonjour,

    Et quelque chose du genre ne fonctionnerait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check_status() {
        xdir=/usr/xenocara
        [ -n "$(set "$xdir"/* "$xdir"/.* ; echo $4)" ]
    }
    NON, en fait, ça ne fonctionne pas
    Cordialement.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 284
    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 284
    Points : 12 739
    Points
    12 739
    Par défaut
    Reste tout de même le cas particulier du lost+found
    Cordialement.

  17. #17
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Oui, ou juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    check_status() {
        xdir=/usr/xenocara
        [ "$(ls -a /tmp/foo| tail -n +3)" ]
    }
    ɹǝsn *sıɹɐlos*

  18. #18
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Après réflexion, j'ai squizzé ce test sur le répertoire xenocara car il n'est pas nécessaire.

    Je vous remercie et je garde à ma disposition vos différentes propositions de scripts qui peuvent m'être utiles à l'avenir
    .Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'action via CVS sous Eclipse
    Par apqmwnqmap dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 12/09/2012, 11h02
  2. Limiter le débit de téléchargement via PHP
    Par Lock622 dans le forum Langage
    Réponses: 3
    Dernier message: 26/06/2007, 18h47
  3. Récupération adresse de téléchargement via un edit
    Par BXDSPORT dans le forum Delphi
    Réponses: 2
    Dernier message: 30/04/2007, 06h55
  4. [Tableaux] Vérification de paramètres via un tableau
    Par Shandler dans le forum Langage
    Réponses: 14
    Dernier message: 20/01/2007, 00h08

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