Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

dirname et $0

3 réponses
Avatar
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

3 réponses

Avatar
Nicolas S.
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.
Avatar
Marc Boyer
On 2008-09-08, Kevin Denis wrote:
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)
Avatar
telenligne t-online
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