Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Aller à la page:  1 2 Page suivante
Page: 1 sur 2
script : chemin relatif -> chemin absolu
Envoyé par: cedric b

Bonjour,
Une nouvelle question, en script bash :

J aimerai connaitre le moyen de transformer une variable contenant un chemin relatif au repertoire courant vers un chemin absolu.

exemple (c est toujours plus facile avec) :
REP_RELATIF=$1
REP_ABSOLU=.?.?.?
echo "vous avez choisi le repertoire $REP_ABSOLU"

si le script est appele depuis /home/user :
$./monSript.sh monRep
vous avez choisi le repertoire /home/user/monRep

Merci

Cedric

Poste le Wednesday 23 March 2005 05:07:15
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: marc ferraton

REP_ABSOLU=`pwd`

attention ` = <AltGr> <7>
voir le man pwd

Poste le Wednesday 23 March 2005 09:58:20
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

Il ne me faudrait pas le repertoire abslolu actuel, mais le chemin absolu vers le repertoire passe en parametre de mon script.
Je me suis mal exprime.

Poste le Wednesday 23 March 2005 10:03:23
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cancerus

Bonjour,

Si tu as le chemin absolu du répertoire actuel et le chemin relatif du répertoire qui t'intéresse, tu peux facilement construire le chemin absolu de ce même répertoire.

mais, sinon, un peu sioux et pas forcément très propre :

rep_rel=$1
cd ${rep_rel}
echo "vous avez choisi le repertoire " `pwd`
cd - >/dev/null 2>&1
exit

A plus.

Poste le Wednesday 23 March 2005 17:18:12
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cancerus

J'oubliais.

Pour que ce script fonctionne, il faut bien entendu que l'utilisateur qui le lance ait le droit de traverser le répertoire (d'où mon appréciation "pas très propre").

Poste le Wednesday 23 March 2005 17:20:25
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Sve@r

Citation
cedric b
Il ne me faudrait pas le repertoire abslolu
actuel, mais le chemin absolu vers le repertoire
passe en parametre de mon script.
Je me suis mal exprime.

#!/bin/sh
# Si le nom du paramètre commence par "/"
if test "`echo $1 |cut -c1`" = "/"
then
# Le paramètre est déjà en absolu
rep_absolu="$1"
else
# Le paramètre est relatif par rapport à notre point de lancement du script
rep_absolu="`pwd`/$1"
fi

Poste le Wednesday 23 March 2005 19:32:07
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Eric92

En bash on peut simplifier les lignes 3 et 9 :
if [[ "$1" = /* ]]

rep_absolu="$PWD/$1"

Mais la solution de cancerus (cd ${rep_rel})
est meilleure si on veut tenir compte des cas avec ../

P.S. au lieu de `pwd` on peut écrire $(pwd)
mais $PWD est plus efficace, utilise une variable gérée par bash.

Poste le Thursday 24 March 2005 00:30:45
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

OK, je regarde vos solutions.
Je pense que je vais faire un mix de tout ca.@:-)

Par contre, il y a un petit soucis auquel vous n avez pas pensez :
un repertoire abslolu ne commence pas forcement par '/' .... En effet, cela peut aussi commencer par '~' ];-)
Mais d un autre cote, le test n est pas vraiment utile puisque ca marche dans les 3 cas (~*, /* et autres).

Apres une certaine reflection et l etude de vos solutions et idees et celle des pages man de test et de bash, voici donc ma solution :


cd $1
cd $OLDPWD
echo "vous avez choisi le repertoire " $OLDPWD

3 lignes...
:-))

Poste le Thursday 24 March 2005 03:40:56
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

PS

On peut bien sur ajouter le test du repertoire :
if [ ! -d $1 -o ! -r $1 ]; then
echo "HEHEHEHEHE, recommence! smiling smiley"
return -1;
fi

Merci pour tout

cedric

Poste le Thursday 24 March 2005 03:54:40
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Sve@r

Citation
Eric92
En bash on peut simplifier les lignes 3 et 9 :
if
[[ "$1" = /* ]]

rep_absolu="$PWD/$1"

Mais la solution de cancerus (cd ${rep_rel})
est meilleure si on veut tenir compte des cas avec
../

P.S. au lieu de `pwd` on peut écrire $(pwd)
mais $PWD est plus efficace, utilise une variable
gérée par bash.

Joli et élégant. En revanche, j'avais bien pensé aux cas "../toto/.././" mais je me suis dit que, de toute façon, le système s'y retrouverait toujours et que ce n'était pas la peine de simplifier.

Poste le Thursday 24 March 2005 19:38:02
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Sve@r

Citation
cedric b
Par contre, il y a un petit soucis auquel vous n'avez pas pensé :
un repertoire abslolu ne commence pas forcement
par '/' .... En effet, cela peut aussi commencer
par '~'

Nonnon, tu fais erreur. Un répertoire absolu commence TOUJOURS par "/"
Lorsque tu tapes "~", le shell interprète ce caractère et le remplace par ce qu'il faut. Et en final, le répertoire résultant commence par "/"

Poste le Saturday 26 March 2005 13:37:05
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

Hehehe... tu a presque raison je crois.
en effet j ai verifie.... SAUF QUE!!!!angry smiley)
imagine que, tel un windozien affranchi.... tu mettes des espaces dans des noms de repertoire.
lors de l appel du script, le meilleur moyen de ne pas decoupe ton argument c est de le protege par des guillemet.
Or, je viens de tester (par un echo $1), lorsque tu mets des guillement (double) autour de l argument, il ne transforme plus de ~user en /home/user...^^D-*

(ouf.... j ai sauve ma situation:-p)

Poste le Monday 28 March 2005 04:11:44
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Sve@r

Vi, tu as raison. Si tu appelles
./prog "le repertoire1" "~moldave" ben il transformera pas "~moldave" en "/home/moldave"

C'est normal, les règles du shell disent que les guillemets double inhibent tout sauf le $, le backquottes, le guillemet double et le backslash s'il précède un des 3 caractère cités. Cela signifie que, si l'utilisateur qui connait le shell appelle "~moldave" c'est qu'il ne veut pas que le tilde soit étendu. Donc faut pas que ton script interprète ce tilde là où l'utilisateur ne le veut pas.
Faut pas essayer de faire un script qui réfléchisse à la place de l'utilisateur, c'est pas bon. 1) tu te feras vraiment chier et 2) tu risques de faire des erreurs ou d'oublier des trucs ou de faire chier l'utilisateur qui appellera ton script

Conclusion, vaut mieux que tu fasses un script tout simple qui cherche juste le "/" en début des noms. Si l'utilisateur veut lui passer un nom avec espace, il met des guillemets (ou un backslash devant l'espace). Si l'utilisateur lui passe ~moldave le shell transforme cet argument et ton script fonctionne toujours, et si l'utilisateur passe "~moldave" ben tu considères que l'utilisateur a fait son choix par rapport à tes règles (qui correspondent à celles du shell) et tu te fais pas chier à tenter de le corriger (peut-être qu'il ne veut pas).

C'était mon conseil. mais en effet, tu as raison. "~moldave" reste tel quel. Pour le shell, ce n'est plus un nom de répertoire, c'est juste un texte.

Poste le Monday 28 March 2005 17:39:30
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu

C'est une chose assez simple a traiter avec un case :

parametre=$1
if [ ${parametre:+1} -eq 1 ]

then
        prem_lettre=${parametre:0:1}
        case "$prem_lettre" in
        /)
        echo commence par un /  donc  chemin absolu
        ;;
        ~)
        echo -e "commence par un ~ ->  substibution de ~ par $HOME" 
        ;;
        *)
        echo "relatif"
        ;;


        esac
else
        echo -e " \$1 n\'existe pas"
        break;
fi

Poste le Monday 28 March 2005 20:00:54
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: Sve@r

Déjà tu ne traites pas le cas "~machin" qui signifie "réperoire "HOME" de "machin". Et surtout, ne va pas faire un "if" en disant "~machin" c'est "/home/machin" parce que ce n'est pas forcément vrai. Tu devras aller récupérer ce répertoire dans "/etc/passwd".

De plus, comme je l'ai dit, tu fais un script qui cherche à réfléchir à la place de l'utilisateur. Imagine que l'utilisateur ait chez-lui un répertoire "~" (il a le droit). Il lance ton script en se disant <je vais aller traiter le répertoire "~"> et il se retrouve à traiter le répertoire "$HOME". Il risque de ne pas apprécier.
Enfin, chacun est libre. Personnellement, quand je fais un script qui gère des répertoires je ne me préoccupe pas de la façon dont les autres appelleront mon script.

Poste le Monday 28 March 2005 22:28:42
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu

1 - C'est un script d'exemple
2 - Sinon on pouvais aussi considérer ~+ et ~-
3 - de toute facon le ~ en dehors d'une déspécialisation est traité avant de rentrer dans la boucle




Poste le Tuesday 29 March 2005 01:09:04
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

De toute maniere, j ai garde ma solution :
cd $1
cd $OLDPWD
echo "vous avez choisi le repertoire " $OLDPWD

Je crois que ca doit marche partout.

elle marche dans tous les cas.
Mais merci Sve@r pour le conseil. bien que... un nom de repertoire commencant par un ~ me parait plus tordu que d entourer le parametre de guillemets pour proteger les espaces.

Poste le Tuesday 29 March 2005 04:03:40
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: ceric35

moi aussi alors :-))

Oublie pas les guillemets non plus , sinon ca marche plus avec les repertoires qui contienent des espaces !

pushd "$1" &> /dev/null
rep=$(pwd)
popd  &> /dev/null
echo "vous avez choisi le repertoire " "$rep"

-------------------------------------------------------------------------------------------------
Linux est pour la firme de Redmond ce qu'est James Bond pour les
méchants dans les films : le dernier obstacle avant la domination mondiale.

Poste le Tuesday 29 March 2005 10:43:08
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: cedric b

OHHH!!!!:-)
Merci beaucoup! j avais pas pense a ca!
:-))

Poste le Wednesday 30 March 2005 03:48:34
Répondre     Citer    
Re: script : chemin relatif -> chemin absolu
Envoyé par: DonCamillo

Salut,

Ce post est vieux mais cette commande peut vous sauver :
readlink -f chemin_absolut

voilà, c'est magique.
de rien.

Poste le Friday 20 May 2016 13:47:41
Répondre     Citer    
Aller à la page:  1 2 Page suivante
Page: 1 sur 2

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
script : chemin relatif -> chemin absolu
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.
Nouveau sujet sur ce forum

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons