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 :

Affichage de variable contenant une chaine de caractères


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut Affichage de variable contenant une chaine de caractères
    Bonsoir,

    Je ne comprends pas ce qui se passe dans la séquence de commandes suivante

    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
    18
    19
    20
    21
    [mar. 14 février (~) user] fichier="/var/www/html/Cours/social2/jurisprudence/juri0467"                    
    [mar. 14 février (~) user] cat $fichier                                                                    
    /var/www/html/Cours/social2/jurisprudence/juri0467                                                         
     
    <h1>Titre</h1>                                                    
    [mar. 14 février (~) user] chemin=$(sed 1q $fichier)                                                       
    [mar. 14 février (~) user] echo $chemin                                                                    
    /var/www/html/Cours/social2/jurisprudence/juri0467                                                         
    [mar. 14 février (~) user] echo $fichier                                                                   
    /var/www/html/Cours/social2/jurisprudence/juri0467                                                         
    [mar. 14 février (~) user] echo "chemin#$chemin#"                                                          
    #hemin#/var/www/html/Cours/social2/jurisprudence/juri0467                                                  
    [mar. 14 février (~) user] echo "fichier#$fichier#"                                                        
    fichier#/var/www/html/Cours/social2/jurisprudence/juri0467#                                                
    [mar. 14 février (~) user] titre="<h1>Titre</h1>"                                                          
    [mar. 14 février (~) user] titre2=$(sed -n 3\p $fichier)                                             
    [mar. 14 février (~) user] echo "titre2#$titre2#"                                                          
    #itre2#<h1>Titre</h1>                                                                                      
    [mar. 14 février (~) user] echo "titre#$titre#"                                                            
    titre#<h1>Titre</h1>#                                                                                      
    [mar. 14 février (~) user]
    Dans ces commandes, en principe, la variable $chemin et la variable $fichier devraient avoir le même contenu, mais ça n'est pas le cas, alors que cherche à m'assurer qu'il n'y a pas un caractère invisible du genre espace en demandant que la variable s'affiche entre deux #
    Mais le résultat est un peu déconcertant, cf lignes 11 à 15 ci-dessus

    Il en va de même des variables $titre et $titre2: elles devraient avoir le même contenu et ça n'est pas le cas, et elles s'affichent bizarrement (cf. lignes 17 à 20)

    Qui pourrait m'expliquer ?

    Cordialement,

  2. #2
    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
    Bonjour,

    le fichier a été enregistré au format DOS, il faut le convertir au format UNIX, avec quelque chose comme dos2unix.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Merci, c'est bien ça. Mais pourquoi ce fichier s'est-il enregistré au format DOS ? C'est un mystère pour moi...
    Avec tous mes remerciements...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laloupiote Voir le message
    Merci, c'est bien ça. Mais pourquoi ce fichier s'est-il enregistré au format DOS ? C'est un mystère pour moi...
    Il peut avoir été rapatrié via ftp depuis une machine Windows en mode binary, ou bien avoir été copié depuis un périphérique USB (disque dur ou clef) formaté pour Windows...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Je viens (enfin) de comprendre comment mon fichier a été enregistré sous dos, et du coup, j'ai un autre problème...

    mon fichier a été créé par une commande php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $php = fopen ($fichier, "w");
     
    fwrite($php,"<h1>Fichier</h1>$fichier\n\n<h1>Titre</h1>$titre1\n\n<h1>avant</h1>$avant\n\n<h1>apres</h1>$apres\n\n<h1>parent</h1>$parent\n\n<h1>Mots clés</h1>$keywords1\n\n<h1>Description</h1>$description1\n\n££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££\n\n<h1>Contenu</h1>$contenu1\n\n<fin>\n\n<note>$notes1<finnotes>"); 
     
    fclose ($php);
    Ce faisant, mon fichier a "apache" comme propriétaire et, si je lance la commande dos2unix, ça me fait une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ven. 16 mars (~) user] dos2unix /var/www/html/Cours/social2/fichiers_table/page0197
    dos2unix: Failed to change the owner and group of temporary output file /var/www/html/Cours/social2/fichiers_table/d2utmpFEtOVl: Opération non permise
    dos2unix: converting file /var/www/html/Cours/social2/fichiers_table/page0197 to Unix format ...
    dos2unix: problems converting file /var/www/html/Cours/social2/fichiers_table/page0197
    Dans mon script bash, cette commande est lancée sous mon utilisateur ordinaire "user" qui, pourtant, appartient bien au groupe apache et les membres de ce groupe peuvent bien "voir et modifier le contenu".
    Pour que la commande fonctionne, il faudrait que je la lance sous root.

    Pour résoudre mon problème, il faudrait donc
    - soit trouver un moyen d'enregistrer ce fichier sous unix avec la fonction fwrite()? ou une autre fonction php?
    - soit trouver un moyen pour faire fonctionner ma commande dos2unix sous mon utilisateur "user"
    - ou autre chose encore ???

    Une idée pour résoudre ce problème?

    Cordialement,

  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
    Bonjour,

    il existe un recueil de méthodes dans la section Contribuez. Si tu peux lire le fichier, certaines te permettent de rediriger leur sortie vers un nouveau fichier, que tu pourras traiter, ou utiliser directement le flux.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 119
    Points : 73
    Points
    73
    Par défaut
    Merci pour ta réponse.
    En fait, je me suis débrouillé en lançant la commande dos2unix ç partir d'un script php. Ainsi, c'est apache qui lance la commande et ça passe...
    Cordialement,

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laloupiote Voir le message
    Dans mon script bash, cette commande est lancée sous mon utilisateur ordinaire "user" qui, pourtant, appartient bien au groupe apache et les membres de ce groupe peuvent bien "voir et modifier le contenu".
    Attention, il se peut que la commande dos2unix efface l'ancien fichier pour remettre le nouveau. Dans ce cas, ce ne sont pas les droits du fichier qui sont à prendre en compte mais les droits du répertoire dans lequel il se trouve. Est-ce que le groupe apache peut écrire dans le répertoire en question ???

    Citation Envoyé par laloupiote Voir le message
    Pour que la commande fonctionne, il faudrait que je la lance sous root.
    Le raisonnement "ça ne marche pas avec moi donc faut que ça soit lancé sous root" est très basique, très manichéen et très source d'ennuis possibles (ouverture d'un processus root sur un service accessible à tout le monde ). Le bon raisonnement est "ça ne marche pas donc je dois comprendre pourquoi puis ensuite, une fois que j'aurais compris, je réfléchirai aux différentes solutions envisageables. Peut-être qu'il n'y aura que la solution root mais au-moins j'aurai tout fait pour éviter d'en arriver là".
    D'ailleurs quand tu as eu réfléchi un peu plus posément, tu en as trouvé une autre qui était de faire lancer la commande par l'utilisateur apache...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Oracle] Requête avec une variable contenant une chaine de caractères accentué non trouvé
    Par chris0938 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 07/01/2011, 21h23
  2. Réponses: 1
    Dernier message: 24/01/2008, 17h30
  3. Lister fichiers Office contenant une chaine de caractères donnée
    Par beroot57 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/11/2006, 15h02
  4. [C#] Une variable dans une chaine de caractères...
    Par GlorfindelHebril dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/03/2005, 14h30

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