[Programmation Korn Shell] - Création d'une bibliothèque de fonctions

- Création d'une bibliothèque de fonctions [Programmation Korn Shell] - Shell/Batch - Programmation

Marsh Posté le 23-03-2005 à 15:21:21    

Bonjour,
 
Je programme des scripts en Korn Shell et j'utilise des fonctions que j'écris aussi en korn Shell.
 
Le problème est que je ne sais pas si j'ai bien mis en place le mécanisme lié aux fonctions en programmation ksh.
 
En fait, j'ai créé un répertoire :
 

Code :
  1. /home/functions


 
Dans lequel se trouve mes fichiers de fonctions
 

Code :
  1. CheckDate, CheckScript, etc ....


 
En suite, j'ai déclarer la variable FPATH=/home/functions dans le fichier d'initialisation : .profile
 
En suite au sein d'un script :
 

Code :
  1. #!/bin/ksh
  2. #@# Mise en place de la trace d execution
  3. #@# Association des sorties standard et erreur redirigees dans la trace
  4. exec > /home/sybase/prog/callfunction.txt 2>&1
  5. #@# Chargement de la fonction
  6. autoload CheckDate
  7. #@# Appel de la fonction CheckDate
  8. CheckDate $1
  9. if [ $? -eq 1 ]; then
  10.    print "Erreur : argument date."
  11.    exit 1
  12. else
  13.    print "Date : $1, ok."
  14. fi


 
Puis j'exécute ce script
 

Code :
  1. callfunction.ksh 20050606


 
tout se passe comme prévu c'est à dire qu'il valide ou non le format et l'existence de la date passée en paramètre.
 
Es ce que ce mécanisme est correct ?
 
Lorsque je lance le sctipt à la main :  

Code :
  1. callfunction.ksh 20050606


 
Ca marche correctement.
Par contre via la crontab, ça ne marche pas.
Il n'y a une erreur sur l'appel de la fonction.
 
Je pense que cela vient du fait que la crontab n'utilise pas les même fichiers d'initialisation (profile, .profile, etc ....)
 
Quelqu'un a une idée ?
 
Merci.


Message édité par IsBack le 23-03-2005 à 16:01:15
Reply

Marsh Posté le 23-03-2005 à 15:21:21   

Reply

Marsh Posté le 23-03-2005 à 19:28:57    

IsBack a écrit :

Bonjour,
 
Je programme des scripts en Korn Shell et j'utilise des fonctions que j'écris aussi en korn Shell.
 
Le problème est que je ne sais pas si j'ai bien mis en place le mécanisme lié aux fonctions en programmation ksh.
 
En fait, j'ai créé un répertoire :
 

Code :
  1. /home/functions


 
Dans lequel se trouve mes fichiers de fonctions
 

Code :
  1. CheckDate, CheckScript, etc ....


 
En suite, j'ai déclarer la variable FPATH=/home/functions dans le fichier d'initialisation : .profile
 
En suite au sein d'un script :
 

Code :
  1. #!/bin/ksh
  2. #@# Mise en place de la trace d execution
  3. #@# Association des sorties standard et erreur redirigees dans la trace
  4. exec > /home/sybase/prog/callfunction.txt 2>&1
  5. #@# Chargement de la fonction
  6. autoload CheckDate
  7. #@# Appel de la fonction CheckDate
  8. CheckDate $1
  9. if [ $? -eq 1 ]; then
  10.    print "Erreur : argument date."
  11.    exit 1
  12. else
  13.    print "Date : $1, ok."
  14. fi


 
Puis j'exécute ce script
 

Code :
  1. callfunction.ksh 20050606


 
tout se passe comme prévu c'est à dire qu'il valide ou non le format et l'existence de la date passée en paramètre.
 
Es ce que ce mécanisme est correct ?
 
Lorsque je lance le sctipt à la main :  

Code :
  1. callfunction.ksh 20050606


 
Ca marche correctement.
Par contre via la crontab, ça ne marche pas.
Il n'y a une erreur sur l'appel de la fonction.
 
Je pense que cela vient du fait que la crontab n'utilise pas les même fichiers d'initialisation (profile, .profile, etc ....)
 
Quelqu'un a une idée ?
 
Merci.


 
Le cron ne sait pas où se trouve ta fonction (variable PATH de base)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-03-2005 à 23:02:49    

Sve@r a écrit :

Le cron ne sait pas où se trouve ta fonction (variable PATH de base)


 
D'après ce que tu me dis il faut mettre dans le path, le chemin absolu du répertoire où se trouve mes fonctions.
 
Alors pourquoi dans différentes documentation sur le web il préconise de créer une variable FPATH, les alias autoload='typeset -fu', etc .... ?
Si au final il suffit d'ajouter au path une référence pour que cela marche aussi bien en manuel qu'avec la crontab. Je comprends pas trop l'intêret la variable FPATH en fait.

Reply

Marsh Posté le 24-03-2005 à 19:33:54    

IsBack a écrit :

D'après ce que tu me dis il faut mettre dans le path, le chemin absolu du répertoire où se trouve mes fonctions.
 
Alors pourquoi dans différentes documentation sur le web il préconise de créer une variable FPATH, les alias autoload='typeset -fu', etc .... ?
Si au final il suffit d'ajouter au path une référence pour que cela marche aussi bien en manuel qu'avec la crontab. Je comprends pas trop l'intêret la variable FPATH en fait.


 
Bon, déjà je connais pas trop les subtilités du Korn-Shell par rapport au Bourne Shell. Mais je suis quasiment certain (à vérifier) que quand Cron lance un script, il travaille lui en Bourne Shell et donc que ta variable FPATH (que je ne connais pas) ben il s'en fout.
 
Une façon de bien connaître ton environnement Cron: Tu crées un script qui affiche des trucs de ton environnement (echo $0, echo $PATH, echo $FPATH, env, etc...) et tu lances ce script depuis Cron. Tu verras mieux comment ça marche.
 
Autre truc: Quand Cron lance ton premier script (celui qui marche pas), il doit probablement t'envoyer le résultat par mail. Que dis ce mail ?
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-03-2005 à 00:15:49    

Y'a le builtin "env" pour connaitre l'environnement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed