#1 Le 27/05/2011, à 20: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, à 21:20)
Hors ligne
#2 Le 27/05/2011, à 21: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, à 21: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, à 21:25
- FRUiT
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.
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, à 21: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, à 21: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, à 22: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, à 05:49)
Hors ligne
#7 Le 27/05/2011, à 22: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 27/05/2011, à 23:53
- FRUiT
Re : [Résolu] Fichier configuration d'un scipte bash
À 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, à 00: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, à 05: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, à 05:57)
Hors ligne
#10 Le 28/05/2011, à 10: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, à 10: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, à 21: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, à 21: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
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, à 21: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