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 27/05/2011, à 21:57

takanuva

[Résolu] Fichier configuration d'un scipte bash

Bonjour,

Je souhaiterai réaliser un fichier de configuration pour un scripte que j'importerai lors de son exécution.
Pour le moment j'ai trouvé deux façons pour importer un scripte:

source monfichier.sh
. ./monfichier.sh

Le problème est que ces deux commandes s'exécutent dans le répertoire où est lancé le scripte et non où se trouve le scripte. Et que je ne veux pas que le chemin vers le fichier configuration soit en dure mais plutôt que ce dernier soit dans le même répertoire que le scripte.

Du coup il y a deux questions qui pourrai résoudre mon problème.
Existe-t-il une commande pour connaître où le scripte se trouve?
Ou est-ce qu'il y a une autre manière d'inclure un fichier de configuration?

Merci d'avance

Dernière modification par takanuva (Le 27/05/2011, à 22:20)

Hors ligne

#2 Le 27/05/2011, à 22:14

GR

Re : [Résolu] Fichier configuration d'un scipte bash

hello,

dans un shell script, la commande dirname $(which $0) affiche le nom
du répertoire qui contient le shell script.

Bonne chance.

Hors ligne

#3 Le 27/05/2011, à 22:19

takanuva

Re : [Résolu] Fichier configuration d'un scipte bash

Parfait j'aurais pas pu espérer plus rapide.
Merci

Hors ligne

#4 Le 27/05/2011, à 22:25

FRUiT

Re : [Résolu] Fichier configuration d'un scipte bash

GR a écrit :

hello,

dans un shell script, la commande dirname $(which $0) affiche le nom
du répertoire qui contient le shell script.

Bonne chance.

Woa !!

Useless use of dirname (commande totalement useless)
Useless use of which !

Solution totalement pas portable du tout...


SCRIPTPATH="${0%/*}"

Voilà qui est portable et sans commandes externes.

Dernière modification par FRUiT (Le 27/05/2011, à 22:26)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 27/05/2011, à 22:36

takanuva

Re : [Résolu] Fichier configuration d'un scipte bash

Encore plus super! Surtout que j'allais faire la remarque que la commande avec dirname et which ne marchais pas si j'étais justement dans le même repertoire. On me renvoyait:

which: no backup_server.sh in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl)
dirname: opérande manquant
Saisissez « dirname --help » pour plus d'informations.

Enfin là ça marche merci à tous les deux.

Hors ligne

#6 Le 27/05/2011, à 23:07

takanuva

Re : [Résolu] Fichier configuration d'un scipte bash

À non j'ai parlé trop vite!
Si on lance le scripte avec la méthode de FRUiT on n'obtient pas une chaîne vide mais le nom du scripte!

Dernière modification par takanuva (Le 28/05/2011, à 06:49)

Hors ligne

#7 Le 27/05/2011, à 23:42

GR

Re : [Résolu] Fichier configuration d'un scipte bash

Re

ma solution ne marche que si la variable PATH contient le nom du répertoire
qui contient le script. C'est le cas chez moi, à quelques exceptions près. Cela permet de
démarrer les scripts de n'importe ou.

Une autre solution si répertoire pas dans PATH :

ABS=$(readlink -f $0)
DIRNAME=${ABS%/*}  ## si on n'aime pas la commande dirname

bonne nuit

Hors ligne

#8 Le 28/05/2011, à 00:53

FRUiT

Re : [Résolu] Fichier configuration d'un scipte bash

takanuva a écrit :

À non j'ai parlé trop vite!
Si on lance le scipte avec la méthode de FRUiT on n'optient pas une chaine vide mais le nom du scipte!

J'ai rien compris... Mon exemple stocke le chemin du script dans la variable SCRIPTPATH, après il faut bien évidemment l'utiliser..........

Ceci devrait marcher de n'importe ou...

source "${0%/*}/fichier_a_sourcer"

Sinon pour être sur d'avoir le chemin complet, à la rigueur :

source "$(readlink -e "${0%/*}")/fichier_a_sourcer"

Mais normalement pas besoin de tant de précaution...

Ou alors j'ai rien compris au problème...

Dernière modification par FRUiT (Le 28/05/2011, à 01:03)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#9 Le 28/05/2011, à 06:57

takanuva

Re : [Résolu] Fichier configuration d'un scipte bash

Bonjour,

Le problème n'est pas de récupérer entièrement ou non le chemin, ça les deux commandes le font très bien.
Quand je lance

sh repertoire/scripte.sh

SCRIPTPATH vaut bien répertoire (ce qui est exactement ce que je veux.)

Par contre le problème apparaît quand on lance le scripte depuis de le répertoire où il se trouve.
Quand je lance

sh scripte.sh

SCRIPTPATH ne vaut pas chaîne vide comme on pourrait l'espérer mais scripte.sh!

Et ce problème est commun aux deux premières solutions (je n'ai pas testé ta dernière GR).

Dernière modification par takanuva (Le 28/05/2011, à 06:57)

Hors ligne

#10 Le 28/05/2011, à 11:00

FRUiT

Re : [Résolu] Fichier configuration d'un scipte bash

Pourquoi lancer ton script comme ça plutôt que :

./script.sh

Y a-t-il une raison particulière ?

Sinon effectivement il faut décomposer comme GR l'a expliqué :

P="$(readlink -e "$0")"
source "${P%/*}/fichier_a_sourcer"

Ainsi ça marche dans tous les cas...

Dernière modification par FRUiT (Le 28/05/2011, à 11:04)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#11 Le 29/05/2011, à 22:38

takanuva

Re : [Résolu] Fichier configuration d'un scipte bash

Non pas raisons particulière.  Je trouve juste ça plus logique de dire avec quoi je le lance.

C'est pas bien de le faire avec sh?

Hors ligne

#12 Le 29/05/2011, à 22:41

FRUiT

Re : [Résolu] Fichier configuration d'un scipte bash

Si, mais c'est déjà implicitement indiqué au début de ton script dans le shebang :

#!/bin/sh

Donc, pas la peine de le RE-préciser smile

En fait ./script.sh suffit amplement, et même, si ton script est quelque part dans le path, tu peux le lancer comme n'importe quel programme : script.sh

Dernière modification par FRUiT (Le 29/05/2011, à 22:42)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne