Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/02/2012, à 02:22

n3o51

[Resolu]full path en bash

bonjour voila j'ai un script dans un dossier je veut recuper le full path jusqu'au dernier dossier
avec $PWD j'ai pas le dernier / apres le dernier chemin
ensuite avec readlink rien y fait enfin avec dirname $0 j'ai seulement le .
j'ai  ça mais y a t'il pas plus simple
chemin() { [ "`echo $1 | cut -c1`" = "/" ] && echo $1 || echo `pwd`/$1; }
reelpath=`chemin`
echo $reelpath

Par avance merci

Dernière modification par n3o51 (Le 06/02/2012, à 15:48)


Welcome to the real world
________________________________

Hors ligne

#2 Le 06/02/2012, à 02:33

Bousky

Re : [Resolu]full path en bash

Pour avoir le vrai chemin d'un fichier :

$ readlink -f .bashrc
/home/nicolas/.bashrc

Pour avoir juste le dossier, il faut utiliser « dirname » sur le chemin complet (ou l'inverse) :

dirname "$(readlink -f <fichier>)"
readlink -f "$(dirname <fichier>)"

Dernière modification par Bousky (Le 06/02/2012, à 02:35)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#3 Le 06/02/2012, à 02:44

n3o51

Re : [Resolu]full path en bash

salut  mais

/home/n3o/Script/test.sh
ABS_PATH=`readlink -f $0`
real_path=`dirname $ABS_PATH`
echo $real_path

me retourne :

 /home/n3o/Script

comme $PWD d'ailleurs.
Avec ma solution

chemin() { [ "`echo $1 | cut -c1`" = "/" ] && echo $1 || echo `pwd`/$1; }
reelpath=`chemin`
echo $reelpath

me retourne :

/home/n3o/Script/

En faites je voudrais une meilleur solution qui me retourne le même résultat que ma solution mais de façon plus simple et avec le / en dernier

Merci a toi , quand même

EDIT : d'ailleurs ton edit me retourneras la même chose que $PWD

Dernière modification par n3o51 (Le 06/02/2012, à 02:47)


Welcome to the real world
________________________________

Hors ligne

#4 Le 06/02/2012, à 02:55

Bousky

Re : [Resolu]full path en bash

Tu veux connaitre le dossier dans lequel se trouve le script ? Utiliser $PWD ne répond pas au problème, et "$0" ne donne pas un résultat exploitable si le script change le dossier de travail… Mieux vaut à mon avis utiliser la variable $BASH_SOURCE ou[ça marche pas] « demander » au processus de bash quel fichier il utilise (le résultat peut être différent) :

readlink /proc/$$/fd/255

Si ton problème vient juste de l'absence d'un « / » à la fin, pourquoi ne pas le rajouter toi même après n'importe quelle commande ?

realpath="$(<readlink|dirname|...>...)/"

Dernière modification par Bousky (Le 06/02/2012, à 14:31)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#5 Le 06/02/2012, à 03:22

n3o51

Re : [Resolu]full path en bash

Cela me retourneras la même chose donc je vais laisser si quelqu'un a déjà eu ce besoin.
Sinon effectivement je peut encore rajouter le / a la main mais bon ma solution semble fonctionner mais j'aurai aimé savoir s'il y avait pas plus simple

Merci a toi en tout cas


Welcome to the real world
________________________________

Hors ligne

#6 Le 06/02/2012, à 05:00

aduxas

Re : [Resolu]full path en bash

echo $1 | sed 's/[^/]*$//' 

Hors ligne

#7 Le 06/02/2012, à 14:24

n3o51

Re : [Resolu]full path en bash

Merci quand même mais ne fonctionne pas.En gros je veut pouvoir retourner le dossier contenant le script si test.sh est dans Script

./home/n3o/Script/test.sh

ou en étant dans Script

./test.sh

que cela retourne

/home/n3o/Script/

D'ailleur ce que je pensait etre une solution ne focntionne que si on es dans Script
si je lance test.sh comme ça

/home/n3o/Script/test.sh

cela ne fonctionne pas


Welcome to the real world
________________________________

Hors ligne

#8 Le 06/02/2012, à 14:32

AnsuzPeorth

Re : [Resolu]full path en bash

C'est pas un truc du genre !

path=$( cd "$(dirname "$0")"; pwd )

Tu ajoute ton / ensuite, ou direct

path=$( cd "$(dirname "$0")"; pwd )'/'

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#9 Le 06/02/2012, à 14:39

Bousky

Re : [Resolu]full path en bash

Je viens de faire un nouveau test. Ce script :

#!/bin/bash
cd ..
echo '1)'
echo $PWD/$0
echo '2)'
readlink $0
echo '3)'
readlink /proc/$$/fd/255
echo '4)'
echo "$(dirname $(readlink /proc/$$/fd/255))/"

donne ce résultat :

$ ./test 
1)
/home/nicolas/./test
2)
3)
/home/nicolas/Scripts/test
4)
/home/nicolas/Scripts/

« readlink /proc/$$/fd/255 » est la seule méthode qui garantisse d'avoir le bon chemin. Par contre ce n'est pas forcément portable…

Le problème de « $0 », c'est qu'il contient la commande exacte utilisée pour lancer l'exécution, indépendamment de tout chemin.

Dernière modification par Bousky (Le 06/02/2012, à 14:42)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#10 Le 06/02/2012, à 14:42

n3o51

Re : [Resolu]full path en bash

pathfile=`dirname "$0"`'/'

mais le soucis avec ça ca fonctionne si le script est lancer

/home/n3o/Script/test.sh

mais si je suis dans Script est que je fait

./test.sh

cela ne fonctionne plus


Welcome to the real world
________________________________

Hors ligne

#11 Le 06/02/2012, à 14:49

n3o51

Re : [Resolu]full path en bash

Oops merci AnsuzPeorth

path=$( cd "$(dirname "$0")"; pwd )'/'

cela fonctionne parfaitement de n'importe ou smile

Dernière modification par n3o51 (Le 06/02/2012, à 14:49)


Welcome to the real world
________________________________

Hors ligne

#12 Le 06/02/2012, à 14:51

AnsuzPeorth

Re : [Resolu]full path en bash

j'ai tjrs utilisé sans soucis la forme:

path=$( cd "$(dirname "$0")"; pwd )

ps: il est préférable d'utiliser $() au lieu de ``, niveau lisibilité et imbrication.


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#13 Le 06/02/2012, à 14:58

n3o51

Re : [Resolu]full path en bash

Merci beaucoup monsieur smile

et merci a Bousky aussi

Dernière modification par n3o51 (Le 06/02/2012, à 14:58)


Welcome to the real world
________________________________

Hors ligne

#14 Le 06/02/2012, à 15:28

AnsuzPeorth

Re : [Resolu]full path en bash

n3o51 a écrit :

Merci beaucoup monsieur smile

et merci a Bousky aussi

Tu peux dire merci Totor, c'est lui qui nous a donné cette solution ( bien que j'ai lu sur un autre forum que c'etait inutile, mais bon, ca fonctionnne nickel come ça !)

ps: passe en résolu si c'est bon

Dernière modification par AnsuzPeorth (Le 06/02/2012, à 15:28)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#15 Le 06/02/2012, à 15:47

n3o51

Re : [Resolu]full path en bash

Totor smile a sans lui tongue

AnsuzPeorth a écrit :

inutile

  Pourquoi ?


Welcome to the real world
________________________________

Hors ligne

#16 Le 06/02/2012, à 16:39

AnsuzPeorth

Re : [Resolu]full path en bash


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#17 Le 06/02/2012, à 16:45

n3o51

Re : [Resolu]full path en bash

Ok smile merci


Welcome to the real world
________________________________

Hors ligne