Peut-être que je regarde ça dans le mauvais sens .. Mais ici, je suis ce que j'essaie de faire. Je fais l'essentiel de mon travail avec Java, mais je viens de passer à un environnement unix (bash). Je fais ça:
[~/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 de la ligne de commande. C'est à dire: myFunc.ls2()
ou même juste ls2
. Je sais que je peux ajouter les fonctions à mon .bashrc
fichier, mais existe-t-il un autre moyen d'exécuter ces fonctions sans les ajouter à mon .bashrc
?
Une autre approche serait de créer un script appelé
functions.sh
(dans le~/bin
répertoire 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
source ~/bin/functions.sh
ligne à votre.bashrc
fichier. De cette façon, vous pourrez les appeler à partir de la ligne de commande, vous.bashrc
resterez propre et vous aurez une place spécifique pour vos fonctions personnelles.la source
Si vous êtes comme moi, vous ne voulez pas encombrer votre environnement de fonctions. Vous avez également un groupe de fonctions qui vont ensemble en termes de ce qu'elles font, il est donc logique de les placer dans le même fichier de script. (Je sais qu'un dossier avec plusieurs fichiers pourrait servir le même but). Voici une solution possible qui vous permet d'appeler une fonction spécifique dans le script:
la source
source
cela, car il peut gérer deux fonctions du même nom dans deux fichiers sh différents. Je l'ai affiné pour gérer un nombre arbitraire de paramètres en le remplaçant$1 $2 $3 $4 $5
parFUNC_CALL=$1; shift; $FUNC_CALL "$@"
"$@"
. PS Votre approche est en fait fausse; la dernière partie doit être"$FUNC_CALL" "$@"
(c'est-à-dire$FUNC_CALL
doit être entre guillemets)."$FUNC_CALL"
?L'opérateur point ou
source
intégrébash
est analogue à l'import
instruction en Java.Vous pouvez en savoir plus sur l' opérateur point ou la fonction
source
intégrée .la source