J'ai un script qui a certaines fonctions.
Puis-je exécuter l'une des fonctions directement depuis la ligne de commande?
Quelque chose comme ça?
myScript.sh func()
Si le script définit uniquement les fonctions et ne fait rien d'autre, vous pouvez d'abord l'exécuter dans le contexte du shell actuel à l'aide de la commande source
ou .
, puis simplement appeler la fonction. Voir help source
pour plus d'informations.
Bien que les autres réponses soient exactes, vous pouvez certainement faire autre chose: si vous avez accès au script bash, vous pouvez le modifier et simplement placer à la fin le paramètre spécial "$@"
- qui étendra les arguments de la commande la ligne que vous spécifiez, et comme elle est "seule", le Shell essaiera de les appeler mot à mot; et ici vous pouvez spécifier le nom de la fonction comme premier argument. Exemple:
$ cat test.sh
testA() {
echo "TEST A $1";
}
testB() {
echo "TEST B $2";
}
"$@"
$ bash test.sh
$ bash test.sh testA
TEST A
$ bash test.sh testA arg1 arg2
TEST A arg1
$ bash test.sh testB arg1 arg2
TEST B arg2
Pour le polonais, vous pouvez d’abord vérifier que la commande existe et est une fonction:
# Check if the function exists (bash specific)
if declare -f "$1" > /dev/null
then
# call arguments verbatim
"$@"
else
# Show a helpful error
echo "'$1' is not a known function name" >&2
exit 1
fi
La commande suivante enregistre d’abord la fonction dans le contexte, puis l’appelle:
. ./myScript.sh && function_name
Bref, non.
Vous pouvez importer toutes les fonctions du script dans votre environnement avec source
(help source
pour plus de détails), ce qui vous permettra ensuite de les appeler. Cela a également pour effet d'exécuter le script, alors faites attention.
Il n’est pas possible d’appeler une fonction à partir d’un script Shell comme s’il s’agissait d’une bibliothèque partagée.
Edit: WARNING - semble que cela ne fonctionne pas dans tous les cas, mais fonctionne bien sur de nombreux scripts publics.
Si vous avez un script bash appelé "control" et à l'intérieur de celui-ci vous avez une fonction appelée "build":
function build() {
...
}
Ensuite, vous pouvez l'appeler comme ceci (depuis le répertoire où il se trouve):
./control build
Si c'est dans un autre dossier, cela ferait:
another_folder/control build
Si votre fichier s'appelle "control.sh", la fonction sera appelable comme ceci:
./control.sh build