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

Linux Discussion :

[BASH] Insertion de quotes dans une chaîne


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Par défaut [BASH] Insertion de quotes dans une chaîne
    Bonjour à tous !
    Je suis en train de développer un outil d'indexation de partages windows. Pour cela j'ai recours à mount.cifs et à smbclient.
    Malheureusement, certains noms de partages contiennent des caractères spéciaux (accents, espaces), ce qui m'oblige à utiliser des quotes dans la ligne de mount.cifs pour que le partage se monte sur l'arborescence. Exemple pour un partage imaginaire qui contiendrait un accent et un espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mount.cifs '//172.17.0.213/Présentation quelconque' /media/plop -o user=utilisateur,credentials=auth_file,iocharset=utf8
    Grâce à cette commande, je peux monter n'importe quel partage dans l'arborescence.

    Voici mon problème :
    Je n'arrive pas, dans mon script, à insérer les simples quotes autour de '//$IP/$PARTAGE' afin que le mount.cifs fonctionne correctement.

    J'ai essayé de cette façon, en concaténant des chaînes de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MOUNT_COMMAND="mount.cifs '"//$IP/$PARTAGE"' $POINT_MONTAGE -o user=utilisateur,credentials=auth_file,iocharset=utf8
    Mais j'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mount error: improperly formatted UNC name. '//172.17.0.213/Présentation does not begin with \\ or //
    No IP address specified and hostname not found
    (je remarque qu'il coupe le nom du partage au niveau de l'espace).

    Qu'en pensez-vous ?

    Merci d'avance

    Alfred

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    vois Substitution de commandes
    et si tu as toujours des problèmes avec tes single_quotes, échappe les
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    vois Substitution de commandes
    et si tu as toujours des problèmes avec tes single_quotes, échappe les
    ...
    ?
    Je viens de tester en échappant les single_quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MOUNT_COMMAND="mount.cifs \'//$IP/$PARTAGE\' $POINT_MONTAGE -o user=utilisateur,credentials=auth_file,iocharset=utf8"
    J'ai toujours le même message, et malgré les single quotes, le chemin indiqué dans le message d'erreur coupe toujours au premier espace, que je remplace les espaces par "\ " ou non...

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Par défaut
    Je m'y suis pris d'une manière un peu détournée, j'ai l'impression d'avancer, mais c'est pas encore ça...

    Code vim script.sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MOUNT_COMMAND="mount.cifs //$IP/'$SHARE' $POINT_MONTAGE -o blabla"
    echo "$MOUNT_COMMAND"
    $MOUNT_COMMAND
    Code $ ./script.sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mount.cifs //172.17.0.214/'Présentation Nagios' /point/montage -o blabla
    mount error: can not change directory into mount target Nagios'
     
    mount.cifs //172.17.0.214/'Setups' /point/montage -o blabla
    retrying with upper case share name
    mount error(6): No such device or address

    Et dans les deux cas, lorsque je recopie telles quelles les lignes affichées par la commande echo "$MOUNT_COMMAND", le montage se passe bien, sans message d'erreur...

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut
    En faisant directement :
    La substitution des guillemets ne se produit pas sur le contenu de la variable ; autrement dit, ceux-ci n'ont aucun effet et se comportent comme des caractères normaux. Par contre, ceci devrait fonctionner :

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Par défaut
    Merci beaucoup ! avec eval, ça marche très bien !

    Sujet résolu !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IP=192.168.1.1
    PARTAGE="Présentation quelconque"
    POINT_MONTAGE=/media/plop
    MOUNT_COMMAND="mount.cifs '"//$IP/$PARTAGE"' $POINT_MONTAGE -o user=utilisateur,credentials=auth_file,iocharset=utf8"
     
    echo $MOUNT_COMMAND
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    => fds.sh
    mount.cifs '//192.168.1.1/Présentation quelconque' /media/plop -o user=utilisateur,credentials=auth_file,iocharset=utf8

  8. #8
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Par défaut
    Citation Envoyé par Ashin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IP=192.168.1.1
    PARTAGE="Présentation quelconque"
    POINT_MONTAGE=/media/plop
    MOUNT_COMMAND="mount.cifs '"//$IP/$PARTAGE"' $POINT_MONTAGE -o user=utilisateur,credentials=auth_file,iocharset=utf8"
     
    echo $MOUNT_COMMAND
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    => fds.sh
    mount.cifs '//192.168.1.1/Présentation quelconque' /media/plop -o user=utilisateur,credentials=auth_file,iocharset=utf8
    J'obtiens exactement la même chose en faisant un echo MOUNT_COMMAND... et pourtant j'ai ce message d'erreur, selon qui la syntaxe n'est pas bonne... Alors que tapée en direct, elle fonctionne parfaitement...

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

Discussions similaires

  1. [Généralités] insertion double quote dans une chaine
    Par cool dans le forum WinDev
    Réponses: 6
    Dernier message: 27/12/2013, 13h14
  2. Réponses: 2
    Dernier message: 12/04/2011, 14h37
  3. Insertion de plusieurs variables dans une chaîne
    Par mustapha_ess dans le forum C++
    Réponses: 1
    Dernier message: 10/08/2010, 14h13
  4. [Free Pascal] Insertion d'éléments dans une liste chaînée
    Par Pacorabanix dans le forum Free Pascal
    Réponses: 4
    Dernier message: 20/04/2010, 00h42
  5. Insertion d'un caractère dans une chaîne
    Par veuts51 dans le forum Général VBA
    Réponses: 2
    Dernier message: 21/11/2008, 21h35

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