14.6. Exporter une fonction

Pour qu’une fonction puisse être exécutée par un programme shell différent de celui où elle a été définie, il est nécessaire d’exporter cette fonction. On utilise la commande interne export.

Syntaxe : export -f nomfct ...

Pour que l’export fonctionne, le sous-shell qui exécute la fonction doit avoir une relation de descendance avec le programme shell qui exporte la fonction.

Le programme shell progBonj définit et utilise une fonction bonj. Ce script lance l’exécution d’un programme shell autreProgShell qui utilise également la fonction bonj (mais qui ne la définit pas) ; autreProgShell étant exécuté dans un environnement différent de progBonj, il ne pourra trouver la définition de la fonction bonj : une erreur d’exécution se produit.

progBonj
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash

	function bonj
	{
	echo bonj : Bonjour $1
	}

	bonj Madame

	autreProgShell
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -

autreProgShell
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash

echo appel a la fonction externe : bonj
bonj Monsieur
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -

$ progBonj
bonj : Bonjour Madame
appel a la fonction externe : bonj
./autreProgShell: line 4: bonj : commande introuvable
$

Pour que la fonction bonj puisse être exécutée par autreProgShell, il suffit que le programme shell qui la contient exporte sa définition.

progBonjExport
- - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash

	function bonj
	{
	echo bonj : Bonjour $1
	}

	export -f bonj 		=> la fonction bonj est exportée

	bonj Madame

	autreProgShell
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Après son export, la fonction bonj sera connue dans les sous-shells créés lors de l’exécution de progBonjExport.

$ progBonjExport
bonj : Bonjour Madame
appel a la fonction externe : bonj
bonj : Bonjour Monsieur    => affiché lors de l’exécution de autreProgShell
$

La visibilité d’une fonction exportée est similaire à celle d’une variable locale, c'est-à-dire une visibilité arborescente dont la racine est le point d’export de la fonction.

Le programme shell progBonjExport2Niv définit et exporte la fonction bonj. Après avoir utilisée la fonction bonj (bonj Madame), il exécute le programme autreProg1. Le programme autreProg1 utilise la fonction bonj (bonj Monsieur) puis exécute le programme autreProg2. Le programme autreProg2 utilise la fonction bonj (bonj Mademoiselle) puis se termine.

progBonjExport2Niv
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash

	function bonj
	{
	echo bonj : Bonjour $1
	}

	export -f bonj

	bonj Madame

	autreProg1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

autreProg1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	#!/bin/bash

	echo "$0 : appel a la fonction externe : bonj"
	bonj Monsieur

	autreProg2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

autreProg2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash

echo "$0 : appel a la fonction externe : bonj"
bonj Mademoiselle
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 
$ progBonjExport2Niv
bonj : Bonjour Madame
./autreProg1 : appel a la fonction externe : bonj
bonj : Bonjour Monsieur
./autreProg2 : appel a la fonction externe : bonj
bonj : Bonjour Mademoiselle
$