Inserer un fichier bash dans un fichier bash

Résolu/Fermé
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - 18 août 2012 à 01:58
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 18 août 2012 à 14:51
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
A voir également:

8 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 18/08/2012 à 03:18
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
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
18 août 2012 à 12:01
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 août 2012 à 12:09
Salut,

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

Est-ce que "#! /bin/sh" est aussi le shebang de ton script ?
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 18/08/2012 à 12:26
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 18/08/2012 à 12:30
hello
sh ne connait pas source, utiliser .
bash connait source
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
18 août 2012 à 12:49
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 août 2012 à 13:06
$ ./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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 août 2012 à 13:09
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
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 18/08/2012 à 14:05
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 août 2012 à 14:19
fichier Windows avec des ^M en fin de lignes ?
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 18/08/2012 à 14:50
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 août 2012 à 14:51
effectivement, en tapant sh script, il sera exécuté par sh même avec #!/bin/bash au début
0