Inserer un fichier bash dans un fichier bash

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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
source /home/serveur/Domotique/ordres/mysql/insert.sh

Comment faut il faire avec bash ?
Merci

8 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Avec bash, la commande interne source permet d'interpréter le contenu d'un autre fichier ,dan l'environnement du script appelant , ce qui correspond à inclure le source du script ou fichier appelé.
    johand@osiris: ~/tmp $ 
    GNU bash, version 4.2.36(1)-release (x86_64-pc-linux-gnu)
    johand@osiris: ~/tmp $ help source 
    source: source nom_fichier [arguments] 
        Exécute des commandes depuis un fichier dans le shell actuel. 
         
        Lit et exécute des commandes depuis NOMFICHIER dans le shell actuel.  Les 
        éléments dans $PATH sont utilisés pour trouver le répertoire contenant NOMFICHIER. 
        Si des ARGUMENTS sont fournis, ils deviennent les paramètres de position 
        lorsque NOMFICHIER est exécuté. 
         
        Code de sortie : 
        Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le code 
        d'échec si NOMFICHIER ne peut pas être lu


    Gates gave ^H sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    0
  2. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    Je ne comprend pas ce qu'il faut faire ?
    Quand j'execute mon script bash
    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
     source /home/serveur/Domotique/ordres/mysql/insert2.sh
    il m'affiche
     /home/serveur/Domotique/ordres/mysql/e1-off.sh: 106: source: not found


    Merci.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Enlève le "sh" lorsque tu exécutes ton script.

      Est-ce que "#! /bin/sh" est aussi le shebang de ton script ?
      0
  3. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour
    Dans e1-off.sh la ou je veux inclure le fichier "inser2.sh" il y a bien
    #!/bin/bash


    Dans inser2.sh
    #!/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"


    Sans le sh c'est pareil.
    source /home/serveur/Domotique/ordres/mysql/insert2


    Merci.
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    sh ne connait pas source, utiliser .
    bash connait source
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    bonjour,

    Depuis le shell ça marche
    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.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      $ ./a
      hello from a
      hello from b
      $ 
      $ cat a
      #!/bin/bash
      
      echo hello from a
      source ./b
      $ cat b
      #!/bin/bash
      
      echo hello from b
      $ 
      
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Re-

      Il n'y a rien de spécial à faire, ça doit être un autre problème à ton niveau, mais lequel ???

      Pour exemple :

      $ ls 
      foo.sh  insert.sh
      
      $ cat foo.sh 
      #!/bin/bash
      
      source insert.sh
      
      
      $ cat insert.sh 
      #!/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"
      
      
      $ ./foo.sh 
      ceci est un test
      Si vous voyez ces lignes c'est que le fichier insert2.sh et inseré dans le code
      
      $
      0
  7. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    J'ai donné les droits au fichier principal "e1-off.sh" pour qu'il soit executable pour tout le monde

    root@debian:~# chmod ugo+x /home/serveur/Domotique/ordres/mysql/e1-off.sh 
    root@debian:~#


    puis je l'ai executé et ça marche

    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:~$


    jusque là c'etait pour faire un test, maintenaint j'inserer dans le code le vrai code.

    Dans le fichier e1-off.sh
    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
    root@debian:~# chmod ugo+x /home/serveur/Domotique/ordres/mysql/insert.sh 
    root@debian:~#


    le fichier "insert.sh" contient
    #!/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
    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 à
    source /home/serveur/Domotique/ordres/mysql/insert.sh


    Puis j'execute le script principal en root, là ça marche
    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 comprend pas pourquoi il ne marche pas en temps que simple utilisateur alors qu'avec root ça marche et pourtant je l'ai rendu executable pour tout les utilisateurs ?

    Les droits
    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.
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    fichier Windows avec des ^M en fin de lignes ?
    0
  9. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    C'est moi qui a merdé.
    En faite il faut taper
    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
    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
    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.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      effectivement, en tapant sh script, il sera exécuté par sh même avec #!/bin/bash au début
      0