2013-06-18 1 views
1

Mon manuel KornShell (ksh) indique que l'expression -d renvoie true si le fichier existe et qu'il s'agit d'un répertoire. Donc if [[ -d file ]] doit renvoyer TRUE si file est un répertoire. Mais dans mon cas, ce n'est pas comme ça que ça fonctionne. Il retourne TRUE si le fichier existe et n'est PAS un répertoire, mais le manuel des shells dit "et c'est un répertoire". Alors, quelqu'un a-t-il une idée de la raison pour laquelle il travaille à l'opposé de ce qu'il devrait être?Comportement étrange de l'expression -d conditionnelle

+1

http://unix.stackexchange.com/? – eis

+0

Que faire si vous essayez '[-d fichier] && echo" oui "'? – fedorqui

+0

Quel système d'exploitation/version? Fonctionne pour moi sur osx 10.7.5 – SheetJS

Répondre

3

Cela fonctionne bien; ce sont vos attentes qui sont fausses. Dans les shells, une valeur de retour est true, et une valeur de retour non nulle est false.

$ true ; echo $? 
0 
$ false ; echo $? 
1 
+0

La spéculation plausible, mais l'OP n'a pas dit qu'il examinait' $? '. –

0

ksh Opérateur de fichier | Vrai si:

  • -a | fichier existe
  • -d | fichier est un répertoire
  • -f | fichier est un fichier normal (c'est-à-dire, pas un répertoire ou un autre type de fichier)
  • -r | Vous avez l'autorisation de lecture sur le fichier
  • -s | le fichier existe et n'est pas vide
  • -w | Vous avez l'autorisation d'écriture sur le fichier
  • -x | Vous avez l'autorisation d'exécution sur le fichier ou l'autorisation de recherche de répertoire s'il s'agit d'un répertoire
  • -O | file Vous possédez un fichier
  • -G | Votre fichier groupe ID est le même que celui du fichier

kshFileOperatorsFunction.ksh

#***Function to demo ksh file Operators.***# 
fileOperators(){ 
    echo "Entering fileOperators function." 
    if [[ ! -a $1 ]]; then 
     print "file $1 does not exist." 
     return 1 
    fi 
    if [[ -d $1 ]]; then 
     print -n "$1 is a directory that you may " 
     if [[ ! -x $1 ]]; then 
      print -n "not " 
     fi 
     print "search." 
    elif [[ -f $1 ]]; then 
     print "$1 is a regular file." 
    else 
     print "$1 is a special type of file." 
    fi 
    if [[ -O $1 ]]; then 
     print 'you own the file.' 
    else 
     print 'you do not own the file.' 
    fi 
    if [[ -r $1 ]]; then 
     print 'you have read permission on the file.' 
    fi 
    if [[ -w $1 ]]; then 
     print 'you have write permission on the file.' 
    fi 
    if [[ -x $1 && ! -d $1 ]]; then 
     print 'you have execute permission on the file.' 
    fi 
    echo "Exiting fileOperators function." 
} 

Référence: O'Reilly, Learning the KornShell Volume 1