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

[bash] Test Existence fichier depuis read


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [bash] Test Existence fichier depuis read
    Bonjour,

    Probleme tout con : Je veux tester l'existence d'un fichier depuis une entree utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    read p
    if [[ -e $p ]] ; then
      ...
    fi
    Il trouve pas le fichier que je lui passe alors que celui-ci existe bien.
    Comme si il testait [[ -e "path/mon/fichier" ]] au lieu de [[ -e path/mon/fichier ]]

    Merci de votre aide!

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bon je le résous comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    read p
    file_path=${p/\~/$HOME}
    if [[ -e $file_path ]] ; then
    fi
    Je suis preneur s'il y a plus propre.

  3. #3
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Décembre 2013
    Messages : 70
    Points : 159
    Points
    159
    Par défaut
    Bonjour,

    Je ne suis pas certain de comprendre ton problème...

    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
    $ touch fic
    $ read p
    fic
    $ if [[ -e $p ]]
    > then
    > echo "$p existe"
    > fi
    fic existe
    $ touch rep/fic
    $ read p
    rep/fic
    $ if [[ -e $p ]]
    > then
    > echo "$p existe"
    > fi
    rep/fic existe
    $
    Ça fonctionne bien comme attendu.

    Et [[ -e "path/mon/fichier" ]] et [[ -e path/mon/fichier ]], c'est pareil.

    Edit :
    Ah pardon !

    Le ~ n'est pas interprété dans read, il est pris littéralement.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Citation Envoyé par Taylor² Voir le message
    Bon je le résous comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    read p
    file_path=${p/\~/$HOME}
    if [[ -e $file_path ]] ; then
    fi
    Je suis preneur s'il y a plus propre.
    Ici, la résolution est juste pour un "~" isolé, par contre ça ne fonctionne pas pour "~user" qui représente le $HOME de user (si cet user existe).

    Et pour bash, "~+" c'est $PWD et "~-" c'est $OLDPWD.

    Et je ne parle pas des "~n" ou n représente le numéro d'entrée dans la dirstack (voir les commande dirs,pushd,popd)
    Cordialement.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    Je suis preneur s'il y a plus propre.
    Je ne sais pas si c'est plus propre, mais, à la première lecture, je ne comprends pas pourquoi tu invoques un test étendu. Un test simple aurait suffit.
    Ou même
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    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
    les guillemets!
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Une manière de forcer le développement par bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ -e "$(bash -c "echo $p")" ]; then

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Autant passer par un eval dans ce cas...

    Mais une possibilité de risque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ read XX <<<'`ls -ld /tmp`'
    $ echo $XX
    `ls -ld /tmp`
    $ bash -c "echo $XX"
    drwxrwxrwt 16 root root 4096 sept. 28 10:37 /tmp
    $ eval "echo $XX"
    drwxrwxrwt 16 root root 4096 sept. 28 10:37 /tmp
    Cordialement.

  9. #9
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Oui, sur le coup j'étais content d'avoir esquivé eval, et en fait le risque est exactement le même

Discussions similaires

  1. test existence fichier
    Par NPortmann dans le forum SQL
    Réponses: 3
    Dernier message: 19/03/2008, 16h30
  2. Réponses: 8
    Dernier message: 01/08/2007, 15h38
  3. [XI] Test existance fichier
    Par dim07 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 07/03/2007, 10h17
  4. test existance Fichier
    Par ons dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 09/02/2007, 16h09
  5. debutante - test existence fichier
    Par coco21 dans le forum Débuter
    Réponses: 9
    Dernier message: 12/02/2006, 12h07

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