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 :

Probleme de variable


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut Probleme de variable
    Bonjour, j'ai le code suivant, qui doit extraire le chemin absolu d'un fichier, pour ensuite etre injecte dans un mecanisme de corbeille.

    la variable fichier ne prend pas de valeur, pourriez vous m'indiquer pourquoi svp.

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	for i in $@
    		do			
    			fichier= $(readlink -f $i);
    			echo chemin absolu $fichier;
    			effacement direct $fichier;
    		done;;
    Merci d'avance

  2. #2
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut un peu de précision non ?
    Bonsoir,
    Sans vouloir te heurter, il serait bien de préciser avec quel interpréteur de commande tu vas employer ce code.
    As tu bien déclaré tes chemins dans le "$@" ?
    L'existence des fichiers est elle vérifiée en amont ?
    La validité du lien est elle aussi vérifiée ?
    si $fichier est vide readlink ne fait rien.
    le plus simple c'est de poster un peu plus de code pour y voir plus clair
    Essayes si tu peux de modifier le code ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i in $@
    		do			
    			fichier= $(readlink -fevn $i); # man readlink pour les options le "n" doit suffir
    			echo chemin absolu $fichier;
    			echo effacement direct $fichier;
                            /bin/rm $fichier; # je pense que tu veux effacer le fichier et non le lien
    		done;;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta reponse

    Voila les parties de code supplémentaires que tu m'a demandé.
    Le shell que j'utilise est le bash

    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
     
    existe(){
    	#	Verifie l'existence du fichier, si oui lance l'effacement, sinon renvoie une erreur
    	#	Attention, traite les fichier en chemin absolu (exepté ceux situés dans le repertoire de l'utilisateur, ne traite pas non plus les chemin ayant des espaces
    	if [ -f $fichier ]
    		then echo 
    		else erreur 1;#gestion d'erreur fonctionnelle 
    	fi;
    };
     
    effacement_direct(){
    	if existe $fichier;
    	then	if (rm $fichier) 
    				then echo $fichier efface;
    				else echo $fichier;
    			fi;
    	fi;
    };
    Corps du programme principal (incomplet, mais suffisant je pense)
    regarde le premier parametre fourni, regarde si c'est une option, ou un fichier classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    case $1 in
    	-f ) #	Declenche l'effacement sans passer par la corbeille
    	for i in $@
    		do
    			if (i>1) then
    					fichier= $(readlink -f $i);
    					echo chemin absolu $fichier;
    					effacement_direct $fichier;
    			fi;
    		done;;
    ...

  4. #4
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Bonsoir à nouveau,
    As tu essayé le mode verbeux ? si oui qu'a t il remonté comme erreur?
    Ton "echo chemin absolu $fichier;" affiche t il quelquechose ?
    Personnellement je me passerais de faire une routine de test pour simplement valider l'existence du fichier.
    Veux tu simplement supprimer le fichier et non le lien ? (un lien sans fichier ne sert à rien).
    Cordialement

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Rebonsoir, et merci a nouveau

    En faite l'objectif est le suivant:
    j'ai un fichier en paramètre, pour pouvoir le supprimer, je veux obtenir son chemin absolu (depuis /), c'est pourquoi j'ai utilisé le readlink. J'avais tenté une fonction récursive, mais je n'y suis pas arrivé.

    Le but de tout sa étant de supprimer le fichier.

    "echo chemin absolu $fichier;" renvoie "chemin absolu"
    Donc cela implique qu'il y a un problème au niveau de l'affectation de la variable.
    Si t'as une idée pour connaitre le chemin absolu (même quelque chose que je doive coder, juste le principe) je suis preneur.

  6. #6
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Vu l'heure et comme toutes les fonctions des shell , sous linux (et autres systèmes), peuvent être exécutées en absolue ou en relatif je te dirai :
    - man basename
    - man dirname.
    readlink est trop dangereux dans ton cas surtout si tu exécute ton script sous root.
    Bonne nuit et doux chemins vers tes fichiers :p

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu as un espace en trop après le "=" dans ton affectation de variable.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Bien vu matafan. J'avais pourtant viré tout ceux que j'avais vu après la reponse de tretsois, mais celui la était passé au travers.
    L'affectation se produit bien, mais il me renvoie /root/i pour la valeur.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    C'est bon, sa a l'air de marcher (encore une histoire d'espaces..)

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    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 720
    Points : 31 043
    Points
    31 043
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par isildur37 Voir le message
    En faite l'objectif est le suivant:
    j'ai un fichier en paramètre, pour pouvoir le supprimer, je veux obtenir son chemin absolu (depuis /)
    Généralement c'est inutile. Si ton shell voit ton fichier en relatif, il peut le supprimer.
    Mais si vraiment t'as envie de transformer un nom relatif en nom absolu, te suffit de rajouter `pwd` devant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/sh
    for file in $*
    do
        test "`echo $file |cut -c1`" != "/" && name="`pwd`/$file" || name="$file"
        echo "$file => $name"
    done

Discussions similaires

  1. Probleme de variable entre SQL et Php
    Par copin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/06/2005, 10h58
  2. Réponses: 10
    Dernier message: 03/05/2005, 21h57
  3. [langage] Probleme de variable transfert de contenu
    Par Ludo167 dans le forum Langage
    Réponses: 10
    Dernier message: 08/07/2004, 11h40
  4. [algo]probleme de variables hotes ds un insert
    Par omega dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2004, 09h03
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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