Pages : 1
#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
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
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
Merci beaucoup monsieur
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 a sans lui
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 merci
Welcome to the real world
________________________________
Hors ligne