|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
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 :
if (-z toto) exit 1 ; else exit 0 endif quelqu'un a une idée ? |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
la commande "test" c'est [ sous unix
if [ -z toto ] exit 1 ; else exit 0 endif |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
ok merci mais j'ai quand même "if : expression syntax" en ligne commande avec :
Code :
if [ -z toto ] echo 3 ; else echo 4 ; endif |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
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 ; |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
ça compile mais que mon fichier soit plein ou vide ça retourne 0
|
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
Arf' normal c'est ton code qui est buggué du début à la fin
![]() le test à faire c'est -s |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
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é |
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
Code :
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.... |
||
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
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 |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
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 |
|
|
00
|
|
|
#11 | ||
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
comme shell j'ai :
Code :
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) |
||
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 546 ![]() |
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. |
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
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. |
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : août 2008 Messages : 116 ![]() |
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. |
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 971 ![]() |
csh et tcsh sont des shells dépassés mais voici quand même une solution:
Code :
|
||
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() Développeur en systèmes embarqués Inscription : juillet 2004 Messages : 115 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com