#1 Le 07/07/2006, à 10:22
- gene69
[bash][résolu 99%] comment fait-on?
comment fait t'on pour savoir dans quel répertoire est enregistré un script?
le premier qui répond `pwd` est disqualifié, parce que ça ne correspond pas à ce que je veux.
merci.
Dernière modification par gene69 (Le 10/07/2006, à 10:11)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#2 Le 07/07/2006, à 10:53
- yohann
Re : [bash][résolu 99%] comment fait-on?
essai d'être un peu plus précis car je vois pas trop ce que tu veux dire?
un script ou une commande?
un script en général c'est toi qui le fait donc tu es sensé savoir ou tu le range.
si c'est un script ou une commande que tu peux exécuter essai un echo $PATH qui te répond par la variable d'environnement qui contient les emplacement des éxécutable, et puis va voir dans les fichier proposer, le script/la commande est forcément dans l'un d'entre eux.
désolé si j'ai répondu a côté de la plaque mais je vois pas trop ce que tu veux
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#3 Le 07/07/2006, à 11:19
- jr95
Re : [bash][résolu 99%] comment fait-on?
"type commande" donne le chemin complet correspondant à "commande", il faut que le répertoire soit dans la variable PATH.
Sinon, "find / -type f -name commande" donnera tous les fichiers "commande" sur la machine.
Hors ligne
#4 Le 07/07/2006, à 12:52
- gene69
Re : [bash][résolu 99%] comment fait-on?
yohann a compris la question.
Non je ne sais pas ou sont enregistré mes scripts. J'explique.
j'ai un script dans /repertoire/inclusion/
un autre dans /repertoire/config/
et un autre dans /repertoire/
j'appelle tous mes scripts appellent un script d'initialisation dans /repertoire/config/ avec "source".
Mon problème c'est qu'avec source je suis obligé de mettre le chemin absolu sinon ça ne marche pas (il y a des cas ou ça ne marche pas, par ex si je lance sh /repertoire/inclusion/exemple.sh je n'aurai pas le même path que si je fais cd /repertoire/inclusion/ ; sh exemple.sh)
Mon idée c'est de laisser le chemin absolu mais de recalculer la partie "commune" répertoire: de cette manière je n'ai pas besoin de modifier tous mes scripts lorsque je change/ renomme le répertoire.
valà c'est peut-être pas très clair, mais c'est plus détaillé.
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#5 Le 07/07/2006, à 14:01
- szdavid
Re : [bash][résolu 99%] comment fait-on?
je crois que je vois ce que tu cherches...
Sur ma mission actuelle, en développement ksh, il y a un fichier "variables.ksh"
qui ressemble plus ou moins à ça :
#! /bin/ksh
export FPATH=${FPATH}:/usr/local/lib/kshlib # chemin de recherche des fonctions et autoloadables KSH
export NLS_LANG=FRENCH_FRANCE.WE8ISO8859P15 # langue : francaise
export base=/home/toto
export adr_commande1=$base/free
export adr_commande2=$base/shl
Je réponds totalement à coté de la plaque ?
Hors ligne
#6 Le 07/07/2006, à 14:16
- kaworu
Re : [bash][résolu 99%] comment fait-on?
Salut !
alors je suis vraiment pas sûr d'avoir compris, donc patapper.
ce que tu cherche est la commande dirname
Ainsi tu lance ton script, dedans tu fais un
PATHSCRIPT=$(dirname $0)
PATHCOMMUN=$( dirname $0 | sed s/"inclusion"// )
ce qui donne à ton script le path : /repertoire/inclusion/
après il suffit de bidouiller pour trouver /repertoire/config/ avec sed..
PATHCONFIG=$( dirname $0 | sed s/"inclusion"/"config" )
ou encore plus simple :
PATHCONFIG=${PATHCOMMUN}/config
Avec ça, tu peux bouger autant que tu veux ton répértoire /repertoire mais il faut bien sûr respecter le fait que le script de base soit dans /LE_PATH_QUE_TU_VEUX/inclusion et le sript à "sourcer" dans /LE_PATH_QUE_TU_VEUX/config
C'est ça?
Dernière modification par kaworu (Le 07/07/2006, à 14:25)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#7 Le 07/07/2006, à 14:17
- szdavid
Re : [bash][résolu 99%] comment fait-on?
mouais ben moi, j'avais rien compris alors
Hors ligne
#8 Le 07/07/2006, à 17:18
- gene69
Re : [bash][résolu 99%] comment fait-on?
ben en fait j'ai pas envie d'utiliser des exports ou des machins comme ça, parce qu'en fait se sont des script d'installation et forcement je peux pas prévoir le répertoire ou sera enregistré le script.
dirname n'est pas la panacée:
#!/bin/bash
coco=`dirname $0`
echo "<<<$coco>>>"
gene69@BoCau:~$ sh /home/gene69/test
<<</home/gene69>>>
gene69@BoCau:~$ sh test
<<<.>>>
j'ai besoin d'un truc qui réponde à tous les coups /home/gene69
comme ça je crois que c'est plus clair...
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#9 Le 07/07/2006, à 17:45
- Link31
Re : [bash][résolu 99%] comment fait-on?
Peut-être ça :
#!/bin/bash
coco=`dirname $0`
if [ "$coco" = "." ]
then
coco=`pwd`
else
if [ "$coco" = ".." ]
then
dir=`pwd`
cd ..
coco=`pwd`
cd $dir
fi
fi
echo $coco
Dernière modification par Link31 (Le 07/07/2006, à 17:48)
Hors ligne
#10 Le 07/07/2006, à 18:06
- oce
Re : [bash][résolu 99%] comment fait-on?
le premier qui répond `pwd` est disqualifié, parce que ça ne correspond pas à ce que je veux.
Bon je frole la disqualification
Mais si j'ai bein compris, ca devrait faire l'affaire ...
#!/bin/bash
coco=`dirname $0`
cd $coco
refdir=$PWD
echo "mon chemin absolu de partout :" $refdir
Hors ligne
#11 Le 09/07/2006, à 03:48
- lost-in-the-shell
Re : [bash][résolu 99%] comment fait-on?
Supposons que tu cherches où est sudo :
$ whereis sudo
sudo: /usr/bin/sudo /usr/bin/X11/sudo /usr/share/man/man8/sudo.8.gz
Si c'est pas ça que tu cherches, désolé pour le post inutile .
Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.
Hors ligne
#12 Le 09/07/2006, à 12:03
- Link31
Re : [bash][résolu 99%] comment fait-on?
Oui, mais whereis ne recherche que dans certains répertoires ("dans les répertoires standards de linux", cf. man whereis).
Hors ligne
#13 Le 09/07/2006, à 18:10
- lunique
Re : [bash][résolu 99%] comment fait-on?
A premiere vue, avec
echo $(pwd)/$(dirname $0)
Sa marche... bon, tu va obtenir un repertoire de la forme /home/toto/./temp/script, mais ce n'est pas faux ^^
En plus, on doit pouvoir facilement retirer le /./ avec sed
edit :
Donc finalement, la commande
echo $(pwd)/$(dirname $0)|sed "s/\/\.\//\//g"
semble donner le resultat attendu
Dernière modification par lunique (Le 09/07/2006, à 18:13)
Hors ligne
#14 Le 10/07/2006, à 10:11
- gene69
Re : [bash][résolu 99%] comment fait-on?
merci oce.
je pense que je vais garder ton astuce. elle est moins élégante mais j'ai pas besoin d'y retoucher pour qu'elle marche. Je n'avais pas penser à combiner les deux fonctions débutant que je suis.
merci lunique.
ton expression semble marcher mais en l'essayant il m'est resté des . et des "////". Et pis je suis loin de maitriser "sed"
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#15 Le 07/08/2007, à 17:18
- julien_
Re : [bash][résolu 99%] comment fait-on?
réponse tardive mais bon, j'ai été confronté au même problème...
la solution
echo $(pwd)/$(dirname $0)|sed "s/\/\.\//\//g"
fonctionne dans de nombreux cas, mais pas toujours :
exemple avec :
/foo/bar$ /foo/bar/script.sh
on obtient "/foo/bar/foo/bar" ce qui n'est pas terrible
voici une solution que je n'ai pas réussi à mettre en défaut jusqu'a présent :
cd $(dirname $0)
dir="$(pwd)"
cd -
la solution précédente fonctionne mais il faut traiter le cas particulier du retour à la racine (premier caractère de $0 à "/")