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 07/07/2006, à 11: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, à 11: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, à 11: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, à 12: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, à 13: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, à 15: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, à 15: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, à 15:25)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#7 Le 07/07/2006, à 15:17

szdavid

Re : [bash][résolu 99%] comment fait-on?

mouais ben moi, j'avais rien compris alors   neutral

Hors ligne

#8 Le 07/07/2006, à 18: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, à 18: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, à 18:48)

Hors ligne

#10 Le 07/07/2006, à 19: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 hmm
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, à 04: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 smile.


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, à 13: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, à 19: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, à 19:13)

Hors ligne

#14 Le 10/07/2006, à 11: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, à 18: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 sad

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 à "/")