Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/11/2017, à 23:09

AGP-Architecture

Accès variable d'un script 1 depuis script 2

Bonsoir à tous,

Toujours avec mes test en bash et je me pose une question : Est-il possible d'avoir accès à des variables d'un script 1 depuis un script 2?

En gros faire quelque chose comme :

script 1

#!/bin/bash

variablescript1="Test 1"
variablescript2="variable 2"

script 2

#!/bin/bash
 ./script1.sh

echo $(variablescript1)
echo $variablescript2

Le but est de faire l'équivalent d'un include en php pour définir un script de traitement des paramètres et "bibliotheque" de fonction perso et de juste l'inclure pour ne pas devoir le recoder à chaque fois ou faire un copier coller.

Merci

Hors ligne

#2 Le 18/11/2017, à 00:20

pingouinux

Re : Accès variable d'un script 1 depuis script 2

Bonsoir,
Dans script2.sh, tu peux exécuter script1.sh dans l'environnement courant.

$ cat script2.sh
#!/bin/bash
. ./script1.sh

echo "$variablescript1"
echo "$variablescript2"

Hors ligne

#3 Le 18/11/2017, à 10:37

Zakhar

Re : Accès variable d'un script 1 depuis script 2

Effectivement, ça s'appelle "sourcer" un fichier !

Bash propose la commande "source" pour cela, mais pingouinux t'a indiqué la "bonne" commande qui est "." (un point)
En effet "source" est un "bashism" et quand il existe des équivalents portables, autant éviter les "bashisms".

Très pratique par exemple pour de la configuration avec variables par défaut:

#! /bin/sh

CONF_FILE="/path/config.file"

CONF_VAR="abc" #valeur par défaut de CONF_VAR

[ -f "${CONF_FILE}" ] && . "${CONF_FILE}"

Là on a une variable CONF_VAR à laquelle on donne une valeur par défaut.
On a aussi un fichier de configuration qui va contenir la valeur que l'utilisateur voudra mettre (éventuellement différente de la valeur par défaut)
On ne source le fichier... que si il existe !.. Sinon on a évidemment un bug !..

Ainsi, même si le fichier de configuration n'existe pas, on a bien toujours une valeur par défaut.

Noter ici : l'entête dit /bin/sh, c'est à dire le shell par défaut utilisé pour le système. Sur Ubuntu ce n'est plus bash depuis des années, mais dash qui est plus léger et largement plus rapide.

S'habituer à éviter les "bashisms" est une bonne pratique. Tu t'en féliciteras si par exemple un jour tu as un NAS comme Synology qui utilise ash... encore bien plus basique de dash !

L'exercice, pour continuer sur mon exemple, c'est de mettre le nom du fichier de configuration en paramètre facultatif accepté par le script. Si le paramètre est spécifié on utilise le fichier de configuration donné par l'utilisateur, sinon, le fichier de configuration par défaut.

Ca donne accepter par exemple :

./mon_script -c "/path/autre_fichier_config"

Petit "détail"... un fichier sourcé n'a pas besoin du bit d'exécution. Ca m'a toujours semblé louche... il va falloir que je trouve l'explication un jour !

Dernière modification par Zakhar (Le 18/11/2017, à 10:43)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#4 Le 18/11/2017, à 12:23

LukePerp

Re : Accès variable d'un script 1 depuis script 2

Bonjour,
La notion s'appelle variable locale et globale.
Pour utiliser une variable globale en bash, faut l'exporter.
Dans le script1, ajouter une ligne pour l'export :

export variablescript1="Test 1"

Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#5 Le 18/11/2017, à 12:26

Watael

Re : Accès variable d'un script 1 depuis script 2

salut,

sans sourcer, on peut exporter :

#!/bin/sh

echo $0
export var=123
./var2script_2
#!/bin/sh

echo $0
echo $var
$ ./var2script_1
./var2script_1
./var2script_2
123

ou, définir des variables environnementales :

#!/bin/sh

echo $0
var=123 ./var2script_2
$ ./var2script_1
./var2script_1
./var2script_2
123

Dernière modification par Watael (Le 18/11/2017, à 12:38)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne