dirname et $0

Le
Kevin Denis
Bonjour,

j'ai un répertoire qui contient des scripts, mettons, /opt/scripts/
Certains scripts se font réference les uns aux autres.

Je dois écrire un script contenu dans /tmp
Je suis bloqué car les scripts, lorsqu'ils doivent s'appeler entre
eux font référenc à dirname $0. A la base un script 'maitre' était
situé dans /opt/scripts/, donc le $0 correspondait au répertoire
de lancement du script maitre. Or, mon script n'est pas dans le même
répertoire que les autres.
Bien évidemment je n'ai pas droits de modifier le contenu de /opt/scripts

Ex:
kevin@slackwall:~$ cat 1.sh
#! /bin/bash
echo je suis dans le 1.sh
BASE=$(dirname $0)
source $BASE/2.sh
kevin@slackwall:~$ cat 2.sh
#! /bin/bash
echo je suis dans le 2.sh
kevin@slackwall:~$ cat /tmp/script.sh
#! /bin/bash
source 1.sh
kevin@slackwall:~$ /tmp/script.sh
je suis dans le 1.sh
./1.sh: line 4: /tmp/2.sh: Aucun fichier ou répertoire de ce type
kevin@slackwall:~$

J'ai bien essayé dans le script.sh de faire un cd préalable, sans succès.
Comment faire pour que les fichiers se fassent bien sourcer?

Merci
--
Kevin
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas S.
Le #16755071
Kevin Denis a écrit:

A la base un script 'maitre' était
situé dans /opt/scripts/, donc le $0 correspondait au répertoire
de lancement du script maitre. Or, mon script n'est pas dans le même
répertoire que les autres.



Je n'ai pas de solution, le « dirname $0 » ne pourra que renvoyer
/opt/scripts/.

Mais tu peux contourner le problème si tu as les droits de lecture sur
les fichiers que je t'invite à copier dans ton répertoire de travail.
L'idéal serait de les corriger par la même occasion et faire les choses
proprement : écrire (au moins) un fichier de configuration («
maitre.conf ») comprenant les variables à utiliser :

% cat maitre.conf
# Fichier de configuration de ...
rep_bin_main='/opt/scripts/'
rep_dest_production="${rep_main}/production/"
# etc...

% cat 1.sh
#!/bin/bash
source /opt/scripts/maitre.conf
echo "$main_rep"
echo "$rep_dest_production"

--
Nicolas S.
Marc Boyer
Le #16755181
On 2008-09-08, Kevin Denis
Bonjour,

j'ai un répertoire qui contient des scripts, mettons, /opt/scripts/
Certains scripts se font réference les uns aux autres.

Je dois écrire un script contenu dans /tmp
Je suis bloqué car les scripts, lorsqu'ils doivent s'appeler entre
eux font référenc à dirname $0. A la base un script 'maitre' était
situé dans /opt/scripts/, donc le $0 correspondait au répertoire
de lancement du script maitre. Or, mon script n'est pas dans le même
répertoire que les autres.
Bien évidemment je n'ai pas droits de modifier le contenu de /opt/scripts

Ex:
:~$ cat 1.sh
#! /bin/bash
echo je suis dans le 1.sh
BASE=$(dirname $0)
source $BASE/2.sh
:~$ cat 2.sh
#! /bin/bash
echo je suis dans le 2.sh
:~$ cat /tmp/script.sh
#! /bin/bash
source 1.sh
:~$ /tmp/script.sh
je suis dans le 1.sh
./1.sh: line 4: /tmp/2.sh: Aucun fichier ou répertoire de ce type
:~$

J'ai bien essayé dans le script.sh de faire un cd préalable, sans succès.



Un cd suivit d'un ; ?
Bon, comme je vais pas aller faire mes tests dans /opt/scripts,
j'ai fais le truc suivant, avec deux rep toto et titi.

gavarnie|~>: cat toto/1.sh
#! /bin/bash
echo je suis dans le 1.sh
BASE=$(dirname $0)
source $BASE/2.sh
gavarnie|~> cat toto/2.sh
#! /bin/bash
echo je suis dans le 2.sh
gavarnie|~> cat titi/script.sh
#! /bin/bash
cd ../toto ; source 1.sh
gavarnie|~> cd titi/
gavarnie|titi> ./script.sh
je suis dans le 1.sh
je suis dans le 2.sh


Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
telenligne t-online
Le #16765121
Nicolas S. wrote:

L'idéal serait de les corriger par la même occasion et faire les choses
proprement : écrire (au moins) un fichier de configuration («
maitre.conf ») comprenant les variables à utiliser :



c'est clair, mais quand on a faire "Qonchita" dans ls bouzin des
autres, autant ne pas se prendre la tete

export BASE=/opt/scripts
readonly BASE
Publicité
Poster une réponse
Anonyme