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

Unix Discussion :

[tcsh] commande qui retourne 0 ou 1 suivant qu'un fichier est vide ou non


Sujet :

Unix

  1. #1
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut [tcsh] commande qui retourne 0 ou 1 suivant qu'un fichier est vide ou non
    bonjour

    je cherche a tester si un fichier est vide ou pas dans un programme de test
    pour cela j'ai pense a une commande system("commande tcsh") mais en paramètre je doit lui donner une commande qui retourne 0 ou 1 suivant que mon fichier est vide ou non.
    pour l'instant j'ai pense a un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (-z toto) exit 1 ; else exit 0 endif
    je l'ai tester en ligne de commande mais il reconnait pas la fin du if (j'ai essaye plusieurs trucs du genre endif, if , end) et dans la commande system il renvoie syntax error

    quelqu'un a une idée ?
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  2. #2
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    la commande "test" c'est [ sous unix

    if [ -z toto ] exit 1 ; else exit 0 endif

  3. #3
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    ok merci mais j'ai quand même "if : expression syntax" en ligne commande avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -z toto ] echo 3 ; else echo 4 ; endif
    j'ai essayé en remplacant endif par fi, end ou rien et c'est pareil
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  4. #4
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Je connais pas le tcsh mais ca doit être similaire au bourne shell, enfin sinon tu fait plus simple :

    [ -z toto ] && exit 1 || exit 0 ;


  5. #5
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    ça compile mais que mon fichier soit plein ou vide ça retourne 0
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Arf' normal c'est ton code qui est buggué du début à la fin

    le test à faire c'est -s

  7. #7
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    toujours pareil avec -s
    là j'essaye d'envoyer le résultat d'un "wc -l" dans un fichier tempo et de lire le résultat mais avec ce @ç#! de langage de test propriétaire de ma boite c'est pas gagné
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  8. #8
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $ tcsh
    www:/tmp> uname -s -r
    Linux 2.6.24.5-grsec-xxxx-grs-ipv4-32
    tcsh --version
    tcsh 6.14.00 (Astron) 2005-03-25 (i486-intel-linux) options wide,nls,dl,al,kan,rh,nd,color,filec
     
    www:/tmp> [ -s ZZ ] && echo ok || echo no
    no
    www:/tmp> echo 1 > ZZ
    www:/tmp> [ -s ZZ ] && echo ok || echo no
    ok
    Tu ne dois pas avoir le même tcsh que les autres

    Pour te faire plaisir j'ai même fait un fichier toto :

    [ -s ZZ ] && exit 1 || exit 0
    echo pas de exit ;

    quand on l'execute ca marche incroyable ( il n'affiche bien entendu pas le texte pas de exit)

    Ca teste si le fichier est vide si il y a un octet dedant il n'est pas vide....

  9. #9
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    effectivement on doit pas avoir le même shell puisqu'avec ta commande j'ai :
    mais je suis en train d'approcher de la solution en faisant un script à part qui sera appelé dans la fonction system() sauf que la valeur de retour de la fonction system ne correspond pas à la valeur de sortie de mon script mais ça c'est plus du au langage de test que j'utilise qu'au shell

    merci quand meme
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  10. #10
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    change par la commande shell qui s'appelle test
    mais sinon sur ton shell en tapant [ et entrée
    il devrait te retourner une erreur du genre

    [: « ] » manquant

    Sinon il est bizare ton unix

  11. #11
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    comme shell j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [xxxxxx/xxxxxxx/xxxxxx/xxxx> echo $SHELL
    /usr/local/bin/tcsh
    d'où le flag [tcsh] de mon post, tu dois pas avoir la même réponse
    mais c'est pas grave, j'ai pu contourner mon pb
    ceci dit je serai même pas étonné si tu étais en tcsh aussi, mon projet ayant été démarré il y a plus de 15 ans, j'ai peut être pas la dernière version de tcsh (au passage je ne connais absolument pas l'évolution de ce shell et donc je ne sais pas s'il y a différente version)
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  12. #12
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    je connais pas tcsh mais tu peux contourner la question

    wc -c truc

    et faire un test sur le chiffre retourné il te suffit de voir le man page de csh ou tcsh pour connaitre la syntaxe du if.

  13. #13
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    merci frp31 mais c'est a peu de chose près la solution que je tentai dans le post #7 (je comptai les lignes et toi les caractères) et qui marche pas a cause du langage de test que j'utilise.
    Sa fonction system me renvoie 0 si tout s'est bien passé, 1 sinon, et ce, sans tenir compte des éventuelles valeurs d'exit que j'aurai pu mettre dans la commande.
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  14. #14
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 139
    Points
    139
    Par défaut
    Pourtant ce n'est pas les solutions qui manquent a l'appel :

    du
    ls -s
    wc -l ou -c
    grep -c

    Et pas besoin de rediriger dans un fichier un affectation de variable et hop'

    Mais pour le tcsh je ne peux rien faire pour toi, un bon man tcsh devrait faire l'affaire.

  15. #15
    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 882
    Points
    7 882
    Par défaut
    csh et tcsh sont des shells dépassés mais voici quand même une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/tcsh
    if ( -z toto ) then
      exit 1
    else
      exit 0
    ɹǝsn *sıɹɐlos*

  16. #16
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    oui merci, c'est la 1ere solution que j'avais tenté mais comme dit plus haut mon problème vient en fait plus de la fonction system() du langage de test que j'utilise (langage interne développé par ma boite spécifiquement pour nos bancs de tests) que de la commande que j'y passe en paramètre.
    je met donc le tag résolu puisqu'on a répondu ici de plusieurs manière à la question posée en plus j'ai pu contourner mon problème d'une autre manière qui marche avec ce @#$!% de langage
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

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

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 17h56
  2. [XL-2007] Copier le contenu d'une cellule dans la cellule suivante si celle-ci est vide
    Par Fransoun dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2012, 20h17
  3. Réponses: 8
    Dernier message: 03/12/2010, 17h03
  4. Réponses: 6
    Dernier message: 02/02/2010, 15h09
  5. Réponses: 14
    Dernier message: 09/04/2004, 14h44

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