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 :

Inclure du code bash dans un script bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut Inclure du code bash dans un script bash
    Bonjour,

    Dans mon script bash je voudrai faire un include comme dans le langage php
    j'ai essayé avec ceci mais ca ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    source /home/serveur/Domotique/ordres/mysql/insert2.sh

    Quand j'execute mon script bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/mysql/e1-off.sh
    /home/serveur/Domotique/ordres/mysql/e1-off.sh: 106: source: not found
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$

    avec ceci dans le script qui correspond a la ligne 106
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     source /home/serveur/Domotique/ordres/mysql/insert2.sh
    il m'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     /home/serveur/Domotique/ordres/mysql/e1-off.sh: 106: source: not found
    J'ai donné les droits au fichier pour qu'il soit executable pour tout le monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rwxr-xr-x 1 root    root      224 18 août  02:28 insert2.sh*
    Comment faut il faire avec bash, es-ce possible ?
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    Bonjour,

    source est une commande bash.
    ton script n'est probablement pas exécuter par bash.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    source est une commande bash.
    ton script n'est probablement pas exécuter par bash.
    J'ai en entête dans les deux fichiers
    Dans e1-off.sh la ou je veux inclure le fichier "inser2.sh" il y a bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    .../
    .../
    source /home/serveur/Domotique/ordres/mysql/insert2.sh

    Dans inser2.sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash  
     
    #---------------TEST  ----------------  
    echo "ceci est un test"  
    echo "Si vous voyez ces lignes c'est que le fichier insert2.sh et inseré dans le code"
    Depuis le shell ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    serveur@debian:~$ source /home/serveur/Domotique/ordres/mysql/insert2.sh
    ceci est un test
    Si vous voyez ces lignes c'est que le fichier insert2.sh et inseré dans le code
    serveur@debian:~$
    Mais quel est la solution pour y faire fonctionner depuis un script bash ?
    Pouvez vous me donner un exemple ?
    Comment puis je faire depuis un script bash ?
    Y doit bien y avoir une solution ?

    Merci.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    et comment fais-tu exécuter le script principal ?

    le shebang du script sourcé n'est pas indispensable, puisqu'il s'éxécute dans l'environnement du script principal.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    J'execute le script principal comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/mysql/e1-off.sh
    /home/serveur/Domotique/ordres/mysql/e1-off.sh: 106: source: not found
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$
    Merci.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    J'ai donné les droits au fichier principal "e1-off.sh" pour qu'il soit executable pour tout le monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@debian:~# chmod ugo+x /home/serveur/Domotique/ordres/mysql/e1-off.sh
    root@debian:~#
    puis je l'ai executé et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    serveur@debian:~$ /home/serveur/Domotique/ordres/mysql/e1-off.sh
    ceci est un test
    Si vous voyez ces lignes c'est que le fichier insert2.sh et inseré dans le code
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$
    Merci.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Y a un truc que je ne pige pas. Jusque là c'etait pour faire un test, maintenant que je veux 'inserer dans le code le vrai code, mais ca marche pas en simple user.

    Dans le fichier e1-off.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/bash
    ................/
    ----------/
    source /home/serveur/Domotique/ordres/mysql/insert.sh

    Je donne les droits au fichier "insert.sh" pour qu'il soit executable pour tout le monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@debian:~# chmod ugo+x /home/serveur/Domotique/ordres/mysql/insert.sh 
    root@debian:~#
    le fichier "insert.sh" contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash 
     
    #--------------- RECUPERATION DE LA VARIABLE DU PROGRAMME QUI EXECUTE CE FICHIER  ---------------- 
    case "$PROGRAMME" in 
    Asterisk) programme="Asterisk" ;; 
    Crontab) programme="Crontab" ;; 
    php) programme="PHP" ;; 
    "") programme="Script bash" ;; 
    esac
    Puis j'execute le script principal en simple utilisateur, çà marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/mysql/e1-off.sh 
    /home/serveur/Domotique/ordres/mysql/e1-off.sh: 92: source: not found 
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono 
    serveur@debian:~$
    La ligne 92 correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    source /home/serveur/Domotique/ordres/mysql/insert.sh
    Puis j'execute le script principal en root, là ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root@debian:~#  /home/serveur/Domotique/ordres/mysql/e1-off.sh 
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono 
    root@debian:~#
    Je ne comprend pas pourquoi il ne marche pas en temps que simple utilisateur (user) alors qu'avec root ça marche et en plus je l'ai rendu executable pour tout les utilisateurs, et part dessus le marché ça marche avec le test "insert2.sh" alors qu'avec "insert.sh" non en temps que simple user ?

    Les droits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    serveur@debian:~$ ls -alF /home/serveur/Domotique/ordres/mysql
    total 136
    drwxr-xr-x 2 root    root     4096 18 août  12:41 ./
    drwxr-xr-x 3 serveur serveur  4096  1 août  21:30 ../
    -rwxr-xr-x 1 root    root     3992 18 août  13:09 e1-off.sh*
    -rwxr-xr-x 1 root    root      224 18 août  12:42 insert2.sh*
    -rwxr-xr-x 1 root    root      259 30 juil. 05:48 insert.sh*
    Merci.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    parce qu'en simple utilisateur, tu exécutes le script avec sh (donc selon la version de linux, soit ash, soit dash, ou un autre shell strictement POSIX, qui ne reconnaît pas source comme une commande valide)

    «seuls les fous croient que les mêmes causes peuvent produire des effets différents» [qui as dit à peu près ça ?]

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    C'est moi qui a merdé

    en faite il faut taper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serveur@debian:~$ /home/serveur/Domotique/ordres/mysql/e1-off.sh
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$
    vu qu'il est exécutable, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/mysql/e1-off.sh
    /home/serveur/Domotique/ordres/mysql/e1-off.sh: 92: source: not found
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$
    Alors que j'aurais dû faire à la place de sh au dèbut mettre bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serveur@debian:~$ bash /home/serveur/Domotique/ordres/mysql/e1-off.sh
    Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
    serveur@debian:~$
    Merci, execusez moi du dèrangement.

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

Discussions similaires

  1. Inclure un script bash dans une page php
    Par kazylax dans le forum Linux
    Réponses: 1
    Dernier message: 27/01/2009, 16h59
  2. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  3. exit dans un script bash
    Par yann_m dans le forum Linux
    Réponses: 2
    Dernier message: 08/11/2007, 23h37
  4. [Débutant]Intégrer du perl dans un script bash
    Par kromartien dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2007, 23h23
  5. [PHP-JS] Inclure du code ASP dans un script PHP
    Par daquin dans le forum Langage
    Réponses: 7
    Dernier message: 04/09/2006, 18h20

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