Les lignes en cause sont:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour
47 if [ ! -a ${BOITE_MAIL_SOURCE} ]
48 then
49 echo ${RED}" Pas de fichier "${CYAN}${BOITE_MAIL_SOURCE}
50 echo ${GREEN}" (Il n'y a pas eu de courrier reçu récemment)"
51 echo ${NORMAL}
52 exit 1
53 fi
8<-----------8<---------8<----------8<----------8<----------8<----------8<
J'ai essayé avec ou sans accolades, $BOITE_MAIL_SOURCE ou
${BOITE_MAIL_SOURCE} et le problème est le même.
Qu'est-ce que j'ai encore mal fait ?!??
Merci de votre aide.
--
$ rm *>o
$ ls
o
Hugo (né il y a 1 357 307 702 secondes)
Les lignes en cause sont: 8<-----------8<---------8<----------8<----------8<----------8<----------8< 16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour
47 if [ ! -a ${BOITE_MAIL_SOURCE} ]
Le -a, c'est un "and", qui ne peut donc pas suivre un "!" (not).
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un synonyme de "-e". Autrement dit, il y a deux -a: un unary et un binary. Seul le binary est standard.
if [ ! -e "$BOITE_MAIL_SOURCE" ] if ! [ -e "$BOITE_MAIL_SOURCE" ]
if ! ls -d -- "$BOITE_MAIL_SOURCE" > /dev/null qui est en fait equivalent a if ! [ -e "$BOITE_MAIL_SOURCE" ] || ! [ -L "$BOITE_MAIL_SOURCE" ]
[ -e ... ] retournera false si ... est un lien symbolique vers un fichier qui n'existe pas.
-- Stéphane
2007-04-30, 02:47(+00), Vincent Lefevre:
Dans l'article <slrnf3alhj.h9b.hugolino@Deborah.Rock-n-Roll.org>,
Hugolino <hugolino@free.fr> écrit:
J'ai encore un problème de test d'existence de fichier quand celui-ci
n'existe pas. (Pas de problème quand le fichier existe)
Les lignes en cause sont:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour
47 if [ ! -a ${BOITE_MAIL_SOURCE} ]
Le -a, c'est un "and", qui ne peut donc pas suivre un "!" (not).
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un
synonyme de "-e". Autrement dit, il y a deux -a: un unary et un
binary. Seul le binary est standard.
if [ ! -e "$BOITE_MAIL_SOURCE" ]
if ! [ -e "$BOITE_MAIL_SOURCE" ]
if ! ls -d -- "$BOITE_MAIL_SOURCE" > /dev/null
qui est en fait equivalent a
if ! [ -e "$BOITE_MAIL_SOURCE" ] ||
! [ -L "$BOITE_MAIL_SOURCE" ]
[ -e ... ] retournera false si ... est un lien symbolique vers
un fichier qui n'existe pas.
Les lignes en cause sont: 8<-----------8<---------8<----------8<----------8<----------8<----------8< 16 BOITE_MAIL_SOURCE=~/mail/mbox_du_jour
47 if [ ! -a ${BOITE_MAIL_SOURCE} ]
Le -a, c'est un "and", qui ne peut donc pas suivre un "!" (not).
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un synonyme de "-e". Autrement dit, il y a deux -a: un unary et un binary. Seul le binary est standard.
if [ ! -e "$BOITE_MAIL_SOURCE" ] if ! [ -e "$BOITE_MAIL_SOURCE" ]
if ! ls -d -- "$BOITE_MAIL_SOURCE" > /dev/null qui est en fait equivalent a if ! [ -e "$BOITE_MAIL_SOURCE" ] || ! [ -L "$BOITE_MAIL_SOURCE" ]
[ -e ... ] retournera false si ... est un lien symbolique vers un fichier qui n'existe pas.
-- Stéphane
Vincent Lefevre
Dans l'article , Stephane Chazelas écrit:
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un synonyme de "-e". Autrement dit, il y a deux -a: un unary et un binary. Seul le binary est standard.
Bizarre, la page man ("man [") n'indique pas la forme unary:
Dans l'article <slrnf3b2p9.4va.stephane.chazelas@spam.is.invalid>,
Stephane Chazelas <cette.adresse@est.invalid> écrit:
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un
synonyme de "-e". Autrement dit, il y a deux -a: un unary et un
binary. Seul le binary est standard.
Bizarre, la page man ("man [") n'indique pas la forme unary:
Oui, quoique quand il n'y a pas ambiguité, c'est aussi un synonyme de "-e". Autrement dit, il y a deux -a: un unary et un binary. Seul le binary est standard.
Bizarre, la page man ("man [") n'indique pas la forme unary:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Vincent Lefevre
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
Dans l'article <4635d125$0$641$426a34cc@news.free.fr>,
Nicolas George <nicolas$george@salle-s.org> écrit:
Vincent Lefevre wrote in message
<20070430110956$2b90@prunille.vinc17.org>:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et
sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec
la construction [[.
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc de zsh [ -a file ] devrait marcher.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a est apparu en premier dans ksh. Je ne sais pas comment -e est apparu mais c'est celui qui a ete choisi par POSIX.
-e est pour "exists", c'est un peu misleading dans la mesure ou un fichier peut exister et ce test renvoyer false. En fait, il teste si on peut faire un stat(2) (pas lstat(2)) avec success sur le fichier. D'ou -a...ccessible je suppose.
-- Stéphane
2007-04-30, 11:37(+00), Vincent Lefevre:
Dans l'article <4635d125$0$641$426a34cc@news.free.fr>,
Nicolas George <nicolas$george@salle-s.org> écrit:
Vincent Lefevre wrote in message
<20070430110956$2b90@prunille.vinc17.org>:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et
sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec
la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc
de zsh [ -a file ] devrait marcher.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a
est apparu en premier dans ksh. Je ne sais pas comment -e est
apparu mais c'est celui qui a ete choisi par POSIX.
-e est pour "exists", c'est un peu misleading dans la mesure ou
un fichier peut exister et ce test renvoyer false. En fait, il
teste si on peut faire un stat(2) (pas lstat(2)) avec success
sur le fichier. D'ou -a...ccessible je suppose.
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc de zsh [ -a file ] devrait marcher.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a est apparu en premier dans ksh. Je ne sais pas comment -e est apparu mais c'est celui qui a ete choisi par POSIX.
-e est pour "exists", c'est un peu misleading dans la mesure ou un fichier peut exister et ce test renvoyer false. En fait, il teste si on peut faire un stat(2) (pas lstat(2)) avec success sur le fichier. D'ou -a...ccessible je suppose.
-- Stéphane
Vincent Lefevre
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Le -a ne semble pas fonctionner avec [ et ! sous bash:
:~$ touch exists :~$ [ ! -e exists ] || echo found found :~$ [ ! -a exists ] || echo found :~$
En revanche, on a bien:
:~$ [[ ! -e exists ]] || echo found found :~$ [[ ! -a exists ]] || echo found found :~$
et
:~$ [ -e exists ] && echo found found :~$ [ -a exists ] && echo found found :~$
C'est la version 3.1 (paquet Debian bash 3.1dfsg-8). Je viens de faire un rapport de bug sur le BTS de Debian.
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc de zsh [ -a file ] devrait marcher.
Je ne pense pas. La page man dit juste:
test [ arg ... ] [ [ arg ... ] ] Like the system version of test. Added for compatibility; use conditional expressions instead (see the section `Condi- tional Expressions'). The main differences between the con- ditional expression syntax and the test and [ builtins are: these commands are not handled syntactically, so for example an empty variable expansion may cause an argument to be omitted; syntax errors cause status 2 to be returned instead of a shell error; and arithmetic operators expect integer arguments rather than arithemetic expressions.
Note le "Like the system version of test". Je pense que le minimum auquel on peut s'attendre, c'est que ça fonctionne avec les opérateurs standard. Sinon, cela ne semble pas spécifié.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a est apparu en premier dans ksh. Je ne sais pas comment -e est apparu mais c'est celui qui a ete choisi par POSIX.
Le -a était peut-être trop ambigu.
-e est pour "exists", c'est un peu misleading dans la mesure ou un fichier peut exister et ce test renvoyer false. En fait, il teste si on peut faire un stat(2) (pas lstat(2)) avec success sur le fichier. D'ou -a...ccessible je suppose.
"accessible" serait un peu misleading aussi (car cela peut faire référence aux permissions). Je pensais plutôt à -a...ll (all types).
Dans l'article <slrnf3bllt.8gm.stephane.chazelas@spam.is.invalid>,
Stephane Chazelas <cette.adresse@est.invalid> écrit:
2007-04-30, 11:37(+00), Vincent Lefevre:
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et
sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec
la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc
de zsh [ -a file ] devrait marcher.
Je ne pense pas. La page man dit juste:
test [ arg ... ]
[ [ arg ... ] ]
Like the system version of test. Added for compatibility;
use conditional expressions instead (see the section `Condi-
tional Expressions'). The main differences between the con-
ditional expression syntax and the test and [ builtins are:
these commands are not handled syntactically, so for example
an empty variable expansion may cause an argument to be
omitted; syntax errors cause status 2 to be returned instead
of a shell error; and arithmetic operators expect integer
arguments rather than arithemetic expressions.
Note le "Like the system version of test". Je pense que le minimum
auquel on peut s'attendre, c'est que ça fonctionne avec les opérateurs
standard. Sinon, cela ne semble pas spécifié.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a
est apparu en premier dans ksh. Je ne sais pas comment -e est
apparu mais c'est celui qui a ete choisi par POSIX.
Le -a était peut-être trop ambigu.
-e est pour "exists", c'est un peu misleading dans la mesure ou
un fichier peut exister et ce test renvoyer false. En fait, il
teste si on peut faire un stat(2) (pas lstat(2)) avec success
sur le fichier. D'ou -a...ccessible je suppose.
"accessible" serait un peu misleading aussi (car cela peut faire
référence aux permissions). Je pensais plutôt à -a...ll (all types).
Effectivement. Mais à noter que le -a unaire n'est pas portable. Et sous zsh, bien que [ soit builtin, le -a unaire ne fonctionne qu'avec la construction [[.
En l'occurrence, je pense qu'il s'agit d'un bug. D'apres la doc de zsh [ -a file ] devrait marcher.
Je ne pense pas. La page man dit juste:
test [ arg ... ] [ [ arg ... ] ] Like the system version of test. Added for compatibility; use conditional expressions instead (see the section `Condi- tional Expressions'). The main differences between the con- ditional expression syntax and the test and [ builtins are: these commands are not handled syntactically, so for example an empty variable expansion may cause an argument to be omitted; syntax errors cause status 2 to be returned instead of a shell error; and arithmetic operators expect integer arguments rather than arithemetic expressions.
Note le "Like the system version of test". Je pense que le minimum auquel on peut s'attendre, c'est que ça fonctionne avec les opérateurs standard. Sinon, cela ne semble pas spécifié.
Ni -e ni -a n'existait dans le Bourne shell. Je pense que [ -a est apparu en premier dans ksh. Je ne sais pas comment -e est apparu mais c'est celui qui a ete choisi par POSIX.
Le -a était peut-être trop ambigu.
-e est pour "exists", c'est un peu misleading dans la mesure ou un fichier peut exister et ce test renvoyer false. En fait, il teste si on peut faire un stat(2) (pas lstat(2)) avec success sur le fichier. D'ou -a...ccessible je suppose.
"accessible" serait un peu misleading aussi (car cela peut faire référence aux permissions). Je pensais plutôt à -a...ll (all types).
Dans l'article <4635d125$0$641$, Nicolas George <nicolas$ écrit:
Vincent Lefevre wrote in message <20070430110956$:
Bizarre, la page man ("man [") n'indique pas la forme unary:
La page de man de bash ([ est un builtin de bash) en parle.
Le -a ne semble pas fonctionner avec [ et ! sous bash:
:~$ touch exists :~$ [ ! -e exists ] || echo found found :~$ [ ! -a exists ] || echo found :~$ [...]
Si, il fonctionne comme specifié par POSIX. Pour un nombre d'arguments (hormis [ et ]) <= 3, c'est entierement specifié.
Ici, on a [ X -a Y ], c'est a dire "X non-vide et Y non vide".
Vu que ni "!" ni "exists" ne sont des chaines vides, le resultat est true. Ici -a est le binary operator.
[ "" -a exists ]
retourne false.
-- Stéphane
Vincent Lefevre
Dans l'article , Stephane Chazelas écrit:
Si, il fonctionne comme specifié par POSIX. Pour un nombre d'arguments (hormis [ et ]) <= 3, c'est entierement specifié.
Ici, on a [ X -a Y ], c'est a dire "X non-vide et Y non vide".
Vu que ni "!" ni "exists" ne sont des chaines vides, le resultat est true. Ici -a est le binary operator.
[ "" -a exists ]
retourne false.
Ah, OK. La page man de bash est assez mal foutue: le passage sur le nombre d'arguments devrait être avant celui sur la signification des opérateurs, puisque la signification réelle des opérateurs dépend du nombre d'arguments.
Dans l'article <slrnf3bpol.8gm.stephane.chazelas@spam.is.invalid>,
Stephane Chazelas <cette.adresse@est.invalid> écrit:
Si, il fonctionne comme specifié par POSIX. Pour un nombre
d'arguments (hormis [ et ]) <= 3, c'est entierement specifié.
Ici, on a [ X -a Y ], c'est a dire "X non-vide et Y non vide".
Vu que ni "!" ni "exists" ne sont des chaines vides, le resultat
est true. Ici -a est le binary operator.
[ "" -a exists ]
retourne false.
Ah, OK. La page man de bash est assez mal foutue: le passage sur le
nombre d'arguments devrait être avant celui sur la signification des
opérateurs, puisque la signification réelle des opérateurs dépend du
nombre d'arguments.
Si, il fonctionne comme specifié par POSIX. Pour un nombre d'arguments (hormis [ et ]) <= 3, c'est entierement specifié.
Ici, on a [ X -a Y ], c'est a dire "X non-vide et Y non vide".
Vu que ni "!" ni "exists" ne sont des chaines vides, le resultat est true. Ici -a est le binary operator.
[ "" -a exists ]
retourne false.
Ah, OK. La page man de bash est assez mal foutue: le passage sur le nombre d'arguments devrait être avant celui sur la signification des opérateurs, puisque la signification réelle des opérateurs dépend du nombre d'arguments.