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

Applications et environnements graphiques Discussion :

Mkdir avec variable contenant un espace


Sujet :

Applications et environnements graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Par défaut Mkdir avec variable contenant un espace
    Bonjour a tous, je patauge pour un truc qui doit etre simple:
    Je récupère des variables 'nom prenom' qui contiennent donc un espace.
    Et je dois les passer en argument d'un script:
    Et ce script sert dans un premier temps a créer un dossier du nom de cette variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/bin/bash
    mkdir $1
    Cela ne fonctionne pas, meme si je mets des ' ' autour de $variable.
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.sh 'nom prenom'
    Ca me crée 2 dossiers: 'nom' ET 'prenom'

    Alors que
    Crée bien un seul dossier 'nom prenom'

    J'ai fait le test de mettre echo $1 dans mon script
    et ca affiche bien nom prenom
    Je pense donc que la variable $1 contient bien l'espace, ce doit être mkdir dans le script qui ne la gère pas.

    Alors que faire?
    Merci par avance de vos conseils

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    faire un espace est tjrs une betise pourquoi ?
    tout simplement parceque rien ne garantie que 100% des programmes le gereront.

    donc il est interdit de faire des espaces !

    si ça te pose des problemes un jour ne viens pas t'en plaindre ici

    tu peux forcer l'espace avec "\ " donc un espace précédé d'un backslash

    aussi ajoutes trois choses à ton script
    avant le mkdir : voir si $i est vide si oui quitter
    avant le mkdir : voir si le repertoir existe si oui quitter
    apres le mkdir : voir si le repertoire existe si oui quitter sinon informer de l'echec et quitter.

  3. #3
    Membre très actif

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Par défaut
    Il est aussi possible de mettre des apostrophes double autour de $1 dans le script, comme tu le fais sur la ligne de commande. Cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    !#/bin/bash
    mkdir "$1"
    Toutefois, je seconde fortement le conseil de ne pas utiliser d'espaces dans les noms de fichiers et de répertoires. Sinon, pourquoi pas aussi un retour à la ligne dans le nom de fichier ?

  4. #4
    Membre chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Par défaut
    Citation Envoyé par dtrosset
    Toutefois, je seconde fortement le conseil de ne pas utiliser d'espaces dans les noms de fichiers et de répertoires. Sinon, pourquoi pas aussi un retour à la ligne dans le nom de fichier ?
    Mets autant d'espace et de caractères spéciaux que tu le souhaites, l'UTF -8 est là pour ça et on est en 2008, les restrictions de 1970 faut arrêter.

    Citation Envoyé par frp31
    avant le mkdir : voir si $i est vide si oui quitter
    avant le mkdir : voir si le repertoir existe si oui quitter
    apres le mkdir : voir si le repertoire existe si oui quitter sinon informer de l'echec et quitter.
    Tu utilises l'options "-p" comme ça il gère la création des parents et ne produit pas d'erreur si le répertoire existe.
    Je penses que tester la valeur de retour de 'mkdir' est suffisant comme test, mais c'est une bonne idée de faire ce test.

  5. #5
    Membre très actif

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Par défaut
    Citation Envoyé par Tchetch Voir le message
    Mets autant d'espace et de caractères spéciaux que tu le souhaites, l'UTF -8 est là pour ça et on est en 2008, les restrictions de 1970 faut arrêter.
    Bine sûr. C'est beaucoup plus joli avec tous les caractères Unicode, en UTF-8. Surtout dans un explorateur graphique montrant tous ces répertoires et fichiers.

    Mais dès qu'il va s'agir d'écrire des shell scripts (on en fait encore beaucoup) ou même de taper quelques commandes sur la ligne de commande d'un shell, les soucis vont arriver. L'espace y est utilisé comme séparateur d'arguments. Rien que le couple find/xargs ne fonctionne pas bien dès qu'il y a des espaces dans les noms de fichiers.

    Une solution serait peut-être d'utiliser un caractère Unicode qui serait un caractère d'espacement mais qui ne serait pas 0x20. Il y a l'espace insécable 0xA0, pourquoi ne pas l'utiliser.

  6. #6
    Membre chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Par défaut
    Citation Envoyé par dtrosset Voir le message
    Bine sûr. C'est beaucoup plus joli avec tous les caractères Unicode, en UTF-8. Surtout dans un explorateur graphique montrant tous ces répertoires et fichiers.

    Mais dès qu'il va s'agir d'écrire des shell scripts (on en fait encore beaucoup) ou même de taper quelques commandes sur la ligne de commande d'un shell, les soucis vont arriver. L'espace y est utilisé comme séparateur d'arguments. Rien que le couple find/xargs ne fonctionne pas bien dès qu'il y a des espaces dans les noms de fichiers.

    Une solution serait peut-être d'utiliser un caractère Unicode qui serait un caractère d'espacement mais qui ne serait pas 0x20. Il y a l'espace insécable 0xA0, pourquoi ne pas l'utiliser.
    En perl, en bash, en C, ... il est possible de supporté les noms de fichiers à espace. Les utilisateurs de ton réseau (généralement windows) utilise de toute façon les espaces et tes scripts doivent le supporter, donc pourquoi je vais m'interdire à moi de ne pas mettre des espaces. On est en 2008, j'ai de toutes façons des utilisateurs qui font comme bon leur semble et l'UTF-8 est là pour ça.

    Et je ne mets pas d'interface graphique sur mes serveurs.

Discussions similaires

  1. [XSLT 1.0] Pb avec variable contenant le nom d'un noeud
    Par alainSQL dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/01/2011, 21h16
  2. Update avec variable contenant une quote
    Par NejNej dans le forum Développement
    Réponses: 2
    Dernier message: 13/11/2009, 17h51
  3. [MySQL] Variable contenant un espace incomplète
    Par Erwan M. dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/03/2008, 09h19
  4. URL dans Label avec variable contenant un blanc
    Par davelop dans le forum ASP.NET
    Réponses: 5
    Dernier message: 19/03/2008, 16h28
  5. Recuperer une variable contenant des espaces
    Par phpaide dans le forum Langage
    Réponses: 9
    Dernier message: 30/05/2006, 16h07

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