Dans mon .bashrc, j'ai une fonction appelée bonjour:
function hello() {
echo "Hello, $1!"
}
Je veux pouvoir invoquer hello () à partir du shell comme suit:
$ hello Lloyd
Et obtenez la sortie:
> Hello, Lloyd!
C'est quoi le truc?
(La vraie fonction à laquelle je pense est plus compliquée, bien sûr.)
EDIT: Ceci est VRAIMENT provoqué par une erreur de syntaxe dans la fonction, je pense! :(
function coolness() {
if[ [-z "$1"] -o [-z "$2"] ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Le test dans votre fonction ne fonctionnera pas - vous ne devriez pas avoir de crochets autour des clauses -z, et il devrait y avoir un espace entre if et le crochet ouvert. Il devrait se lire:
function coolness() {
if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Vous pouvez exporter des fonctions. Dans votre ~/.bashrc
fichier après avoir défini la fonction, ajoutez export -f functionname
.
function hello() {
echo "Hello, $1!"
}
export -f hello
Ensuite, la fonction sera disponible à l'invite du shell et également dans d'autres scripts que vous appelez à partir de là.
Notez qu'il n'est pas nécessaire d'exporter des fonctions à moins qu'elles ne soient utilisées dans des processus enfants (le "aussi" dans la phrase précédente). Habituellement, même dans ce cas, il est préférable de source
la fonction dans le fichier dans lequel elle sera utilisée.
Modifier :
Les crochets dans les instructions conditionnelles Bash ne sont pas des crochets, ce sont des commandes. Ils doivent avoir des espaces autour d'eux. Si vous souhaitez regrouper des conditions, utilisez des parenthèses. Voici votre fonction:
function coolness() {
if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Une meilleure façon d'écrire ce conditionnel est:
if [[ -z "$1" || -z "$2" ]]; then
parce que les doubles crochets offrent plus de capacités que les simples.
Incluez dans votre script la ligne
source .bashrc
essayez avec la construction source cela devrait fonctionner!
Toute modification apportée à .bashrc
ne prendra effet que dans une nouvelle session de terminal. Si vous souhaitez appliquer les modifications à votre session de terminal actuelle, vous devez demander au shell de relire le .bashrc
. Le moyen le plus court d'y parvenir est d'utiliser le .
commande, synonyme de source
:
[user@linuxPc]$ . ~/.bashrc
$ source .bashrc