IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

FPATH définie dans .bashrc, fonction «introuvable»


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut FPATH définie dans .bashrc, fonction «introuvable»
    Env: CentOS-6.5 64 bits
    serveur de test: applicatif oracle

    Bonjour:
    le contexte est le suivant:
    dans le fichiers .bashrc définition de alias: autoload définis sur typeset -fu
    definition du FPATH=/root/bin/bib_functions
    avec en visuel sur la capture (comme vous pouvez voir :les 2 fonctions (netlog, supprlog ) dans la 2iem fenêtres du bas

    et mon script d'appel à ses fonctions :visuLogoracle.sh ( comme vous le voyez dans la 1er fenêtre du haut; avec la trace activé me retourne
    netlog "commande introuvable.
    supprlog "commande introuvable.

    là je ne comprend pas, puisque mes fonctions sont sources, donc visible par mon script d'appel.
    je ne vois pas où cela bloque.

    si une personne avec un œil avertis, pouvais me donner une solution;
    puisque avec des sources, et des autoload , j'ai toujours l'erreur
    merci a tous coup de main, pour se serveur de test applicatif.

    Cordialement
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 667
    Par défaut
    Bonjour,

    FPATH n'est pas une variable utilisée par bash, mais par ksh.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    re Bonjour;

    et Merci à N_Bah pour sa participation.

    après cette information donnée par N_Bah; je me suis inspiré du post de Geral B. (bashdb)

    qui en fait a sourcé ses fonctions dans son script d'appel

    les essais de mon côté, ne sont pas concluants.

    effectivement j'ai aussi sourcé les 2 fonctions dans mon script d'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     source $FPATH/netlog
               source $FPATH/supprlog
    malheureusement, il me met toujours cette erreur " du type qu'il ne voit pas mes fonctions"

    comme vous pouvez le voir sur cette capture d'écran.

    et pourtant mon FPATH:/root/bin/bib_functions est bien visible par un echo $FPATH

    il y a quelque chose qui m'échappe dans les déclarations en bash.

    vraiment merci à tous coup mains; et directives
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 667
    Par défaut
    mais qu'y a-t-il dans les fichiers net/supprlog ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat > mes_Fonctions
    f_1() { echo $FUNCNAME;}
    f_2() { echo "$FUNCNAME aussi";}
    ^D
    $ source ./mes_Fonctions
    $ f_1
    f_1
    $ f_2
    f_2 aussi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    rebonjour

    et merci de ton exemple sur lequel, je me suis inspiré surtout quand tu écris " source ./mes_Fonctions

    mais apres un éssais; j'ai encore se type d'erreur.

    scénario de netlog est tres basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     netlog() {
    set -uvx
    printf "Nettoyage faite par :%s:" "$FUNCNAME"
    printf "Il y a :%s:Fichiers à supprimés...!!!!" "$CPT_OLD_LOG" >> $ORACLE_LOG
    find /var/log/oracle/* -type f -atime +1 -exec mv -t $SUPPR_OLD_LOG {} \; -print
    }
    simple mv de fichiers dans un repertoire $SUPPR_OLD_LOG; suivant ce que find trouve, en fonction du -atime +1 ( tres basique comme action )

    scénario de supprlog est aussi basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    supprlog() {
    set -uvx
     for old_log in `ls -l $SUPPR_OLD_LOG`
      printf " Action de :%s: Il y a: %s : Fichiers supprimés\n" "$0" "$CPT_OLD_LOG"
       do
      /bin/rm -f $old_log | printf "Fichier :%s: supprimé\n" "$old_log" >> "$ORACLE_LOG"
    done
    }
    de meme, pour supprlog, qui lui supprime a des moments précis les logs que j'ai préfixé avec la date, et l'heure ( la raison, est que je dois les gardés pour analyse) dans
    le répertoire $UPPR_OLD_LOG
    ma foie; 2 appels de fonctions par mon script principal qui ne veulent pas s'exécutés.
    --->suivant les captures d'écrans que tu as pu voir.
    et je mets bien, la même syntaxe que toi au moment de le sourcer
    merci de ta lumière.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 667
    Par défaut
    tu sources bien le fichier des fonctions dans le script principal, n'est-ce pas ? car les scripts ne lisent pas ~/.bashrc.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    bonjour,

    Voila; rassure toi, et ne fait pas attention au titre de mon post, puisque à la base j'étais partis du principe, a pouvoir mettre en place mes alias, afin de travailler avec les fonctions par FPATH

    Mais comme tu m'a dis que FPATH était plus du coté de ksh? que bash. je me suis ravisé.

    voila plusieurs questions pour un peu m'éclairer.

    si je pars, dans la même syntaxe que toi ( exemple donné plus haut)

    j'ai quand même gardé FPATH en répertoire à mes fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FPATH=/root/bin/bib_ fonctions
    si je source comme toi; es tu d'accord avec ça? ( c'est sur un tuto que j'avais vus, et le post de bashdb )
    à la différence de toi, il n'y avait pas de . 
     
    source $FPATH/netlog
    source $FPATH/supprlog
    dans mon script visuLogOracle.sh
    =====
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     peux tu me dire si 
    source ./Mes_Fonctions 
     
    est équivalent à
    . ./Mes_Fonctions
    ensuite, tu es d'accord avec moi, que si mes fonctions sont ailleurs de l'arborescence , je dois les sourcées complétement à celle-ci?

    et le fameux . que tu mets devant est t'il indispensable?? car quelques fois, sur des tutos , dans des exemples, il y en n'a, et des fois; il y en n'a pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    ou devrais je faire?
     
    source ./root/bin/bib_fonctions [ dans script principal visuLogOracle.sh]
     
    et travailler avec mes fonctions netlog, et supprlog
    merci je vais essayer a nouveau de faire des tests

    merci de ta réponse

    je reviens, il est 22h15 après des essais; j'ai joué ton exemple de la façon suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    [root@oracleIgname7 bib_functions]# echo $FPATH
    /root/bin/bib_functions:
    [root@oracleIgname7 bib_functions]# ls
    Mes_Fonctions  netlog  supprlog
    [root@oracleIgname7 bib_functions]#
    voici ton exemple, que j'ai joué avec un script d'appel tous simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/bash
    source .$FPATH/Mes_Fonctions
    clear
    set -uvx
    f_1
    sleep 5
    f_2
    en sachant que le script Mes_Fonctions est exécutable
    et le script d'appel à Mes_Fonctions est exécutable
    et que j'ai sourcé avec un . devant; et sans le . après

    voici mon résultat, que je te mets en capture d'écran.

    je ne vois pas ou je pèche, même pour se test; j'ai 'commande introuvable

    merci pour tes directives
    Images attachées Images attachées  

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    "source" est l'exact équivalent de ".", sauf qu'il est plus long à taper et qu'il n'est pas portable (pas POSIX).

    Si tu as l'habitude d'utiliser ".", continue à le faire car "source" n'apporte rien.

    et
    ne sont pas équivalents. Dans le premier cas, le shell source le fichier fonction qui se trouve dans le répertoire spécifié, ici le répertoire courant.

    Dans le deuxième cas, le shell recherche dans les répertoires présents dans le PATH un fichier de nom "fonction", s'il en trouve, il source le premier. S'il n'en trouve pas, il source le fichier "fonction" si présent dans le répertoire courant.

    Il est donc recommandé d'utiliser la première syntaxe, celle qui indique un chemin vers le fichier pour éviter les surprises.

    PS: Il existe une implémentation partielle de FPATH dans les exemples fournis avec bash, autoload, mais elle nécessite un appel explicite par fonction, contrairement à ksh. Tu peux éventuellement y jeter un coup d'oeil.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    Bonjour à N_BaH,

    et merci à jlliagre pour sa participation à se post.

    Effectivement, dans la 2iem remarques de jlliagre; je confirme qu'une partie de mes fonctions ont été traitées.

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    j'ai sourcé avec cette syntaxe ---> . /répertoire/ou sont/les fonctions
     
    cela à été traité en partie;
    à ceux ci près ci-joint un bout de code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SUPPR_OLD_LOG=/var/log/oracle/suppr_log/
     
    find /var/log/oracle/ -type f -atime +1 -exec mv -t $SUPPR_OLD_LOG {} \; -print
    le scénario recherché:

    c'est de faire des mv de fichiers log préfixées par date, et heure, du /var/log/oracle/* suivant le ( -atime +1 de find qu'il trouve ) vers $SUPPR_OLD_LOG

    ma fonction

    retour d'erreur de la fonction netlog est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    mv: «*/var/log/oracle/suppr_log/oracle.log_13042014_18:45:07*» et «*/var/log/oracle/suppr_l│
    og/oracle.log_13042014_18:45:07*» identifient le même fichier                              │
    mv: «*/var/log/oracle/suppr_log/oracle.log_13042014_09:40:44*» et «*/var/log/oracle/suppr_l│
    og/oracle.log_13042014_09:40:44*» identifient le même fichier                              │
    mv: «*/var/log/oracle/suppr_log/oracle.log_13042014_11:55:44*» et «*/var/log/oracle/suppr_l│
    og/oracle.log_13042014_11:55:44*» identifient le même fichier                              │
    mv: «*/var/log/oracle/suppr_log/oracle.log_26042014_13:21:26*» et «*/var/log/oracle/suppr_l│
    og/oracle.log_26042014_13:21:26*» identifient le même fichier                              │
    + supprlog                                                                                 │
    /root/bin/visuLogoracle.sh: line 34: supprlog : commande introuvable                       │
    + printf ' FIN Nettoyage Régulier des Logs. \n'
    info:mon répertoire suppr_log/ est dans /var/log/oracle/
    ma question est

    pourquoi "find" me retourne un telle message?, puisque je lui dis de traiter dans /var/log/oracle/ et mv vers /var/log/oracle/suppr_log/
    et comment dire à find de regarder que dans /var/log/oracle/

    merci de vos directives.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 667
    Par défaut
    pourquoi "find" me retourne un telle message?, puisque je lui dis de traiter dans /var/log/oracle/ et mv vers /var/log/oracle/suppr_log/
    ce n'est pas find qui affiche ce message d'erreur, c'est mv, et il explique très bien pourquoi :
    Citation Envoyé par mv
    «fichier» et «fichier» identifient le même fichier
    comment dire à find de regarder que dans /var/log/oracle/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$repertoire" -maxdepth 1 ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    re-bonjour,

    N_BaH, merci pour cette piste, "-maxdepth" qui m'aide beaucoup. et bien sur; avoir corriger l'erreur que retournait "mv"

    mais avant de fermer mon poste

    associé au "find"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -ctime +1  correspondrait " à la création du fichier a + 24 heures donc a 1 jour
     
    -ctime -1  que voudrait dire -1 ??
    il n'y a pas beaucoup d'informations sur les tutos

    merci de ton information

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 667
    Par défaut
    cela voudrait dire moins de 24 heures, mais je n'en vois pas trace dans le man, alors que la même chose (moins de 24 heures) y est précisé et utilise 0 (zéro).
    de plus, j'observe un résultat identique avec 0 ou -1
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 368
    Par défaut
    Bonjour,
    le 0 et le -1 pour le mtime,atime et ctime ne sont pas vraiment identique mais on les rencontre rarement (puisque c'est sur des temps futur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ date
    Fri May  2 22:26:56 CEST 2014
    $ stat xxx
      File: `xxx'
      Size: 0               Blocks: 0          IO Block: 65536  regular empty file
    Device: 60c75f9dh/1623678877d   Inode: 41095346599784468  Links: 1
    Access: (0644/-rw-r--r--)  Uid: ( 1002/  None)   Gid: (  513/    None)
    Access: 2014-05-02 22:17:05.484932500 +0200
    Modify: 2014-05-02 23:22:00.000000000 +0200
    Change: 2014-05-02 22:24:23.694384500 +0200
     Birth: 2014-05-02 22:13:50.336847000 +0200
    $ find . -maxdepth 1 -mtime 0
    .
    $ find . -maxdepth 1 -mtime -1
    .
    ./xxx

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    Bonjour,

    Merci à disdorgue de sa participation à se post.

    et merci à N_Bah de sa remarque

    par contre, exemple de code très pertinente de disdorgue; sur lequel je vais rebondir.

    ce que je voudrais savoir, a la création d'un dis "fichier.xx"

    et quand on regarde ton exemple, on aperçoit la valeur +2 dans les 4 champs associés a Acces; Modify; et Change .

    Est ce que c'est une valeur figée?..

    Est ce une valeur qui s'incrémente en système; et qui retourne l'info à chaque stat du dis "fichiers.xx"

    cordialement

  15. #15
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    C'est juste le décalage par rapport à temps universel (UTC), le deux mai est en heure d'été donc +2 h.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut
    rebonsoir,

    et merci aux différents participants à se post,
    riche d'enseignement
    je m'en sors assez bien.
    résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Fonction non définie dans l'expression
    Par DREADY dans le forum VBA Access
    Réponses: 17
    Dernier message: 08/03/2007, 16h49
  2. Réponses: 3
    Dernier message: 12/02/2007, 03h14
  3. fonction introuvable dans la dll ?
    Par FamiDoo dans le forum C++
    Réponses: 5
    Dernier message: 22/06/2006, 16h33
  4. Réponses: 2
    Dernier message: 01/06/2006, 14h54
  5. Utilisation fonction définie dans un .Dll
    Par jeab. dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo