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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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...
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...
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...
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)
On 2008-09-08, Kevin Denis <kevin@nowhere.invalid> 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:
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.
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)
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
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
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
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