43 votes

Comment appeler les fonctions bash

Peut-être que je regarde cela de la mauvaise manière.. Mais voici ce que j'essaie de faire. Je fais la plupart de mon travail avec Java mais je viens de passer à un environnement Unix (bash). Je fais ceci :

[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash

ls2(){
        echo "Hello World"
}

ls3(){
        echo "Testing"
}

echo "this is a test"   
ls2 # this calls a function

[~/Desktop/bashPlay]% myFunc
this is a test
Hello World

Mais j'ai deux fonctions dans mon fichier et je veux pouvoir les appeler séparément depuis la ligne de commande. Par exemple : myFunc.ls2() ou même simplement ls2. Je sais que je peux ajouter les fonctions à mon fichier .bashrc mais y a-t-il un autre moyen d'exécuter ces fonctions sans les ajouter à mon fichier .bashrc ?

39voto

Dalroth Points 2468

Une façon de faire cela, qui implique un peu plus de saisie, consiste à utiliser la commande source. Pour appeler une fonction de myFunc, vous pourriez utiliser source myFunc; ls2 et cela afficherait Bonjour le monde.

Par exemple, j'ai un fichier appelé say.sh:

#!/bin/bash

function talk()
{
        echo "salut!"
}

Maintenant je veux appeler sa fonction talk() à partir de la ligne de commande:

\[john@awesome ~\]$ source say.sh; talk
salut!

pour l'appeler depuis un autre script bash:

#!/bin/bash
source say.sh
talk

Vous pouvez également placer chacun dans un script séparé et les ajouter dans un répertoire qui est dans votre variable PATH.

par exemple, dans un script appelé hello vous auriez:

#!/bin/bash
echo "Bonjour le monde"

Maintenant mettez-le dans l'un des répertoires de votre PATH, que vous pouvez afficher en exécutant echo $PATH. Vous pouvez ajouter un autre répertoire à votre PATH si vous le souhaitez ou utiliser un existant. Une fois que vous avez copié le fichier là-bas, rendez-le exécutable avec chmod +x nomfichier.

9voto

Chris R Points 21

Si vous êtes comme moi, vous ne voulez pas encombrer votre environnement avec des fonctions. Vous avez également un groupe de fonctions qui sont liées en termes de ce qu'elles font, donc les mettre dans le même fichier de script a du sens. (Je sais qu'un dossier avec plusieurs fichiers pourrait servir au même but). Voici une solution possible qui vous permet d'appeler une fonction spécifique dans le script :

$ cat functions.sh    
#!/bin/bash

ls2() {
        echo "Hello World"
}

ls3() {
        echo "Testing $*"
}

# la ligne suivante appelle la fonction passée en premier paramètre au script.
# les arguments restants du script peuvent être passés à cette fonction.

$1 $2 $3 $4 $5 

$ ./functions.sh ls2    
Hello World   
$ ./functions.sh ls3    
Testing     
$ ./functions.sh ls3 first_arg    
Testing first_arg    
$

6voto

illracer Points 1221

Une autre approche serait de créer un script appelé functions.sh (dans le répertoire ~/bin par exemple).

Dans ce script, vous ajoutez toutes vos définitions de fonctions personnelles (disons que chaque fois que vous ajoutez une fonction, vous l'ajoutez à ce fichier...)

Enfin, il vous suffit d'ajouter la ligne source ~/bin/functions.sh à votre fichier .bashrc. De cette façon, vous pourrez les appeler depuis la ligne de commande, votre fichier .bashrc restera propre, et vous aurez un endroit spécifique pour vos fonctions personnelles.

1voto

eleven81 Points 14460

L'opérateur point ou la commande source intégrée en bash est analogue à l'instruction import en Java.

Vous pouvez en savoir plus sur l' opérateur point ou la commande source.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X