Comment appeler une fonction définie.bashrc de la coquille?

Dans mon .bashrc, j'ai une fonction appelée bonjour:

function hello() {
   echo "Hello, !"
}

je veux pouvoir invoquer hello () depuis le shell comme suit:

$ hello Lloyd

Et obtenir la sortie:

> Hello, Lloyd!

Quel est le truc?

(la vraie fonction que j'ai en tête est plus compliquée, bien sûr.)

EDIT: C'est vraiment causé par une erreur de syntaxe dans la fonction, je pense! : (

function coolness() {

    if[ [-z ""] -o [-z ""] ]; then
        echo "Usage:  [sub_package] [endpoint]";
        exit 1;
    fi
        echo "Hi!"
}
37
demandé sur les2 2009-10-01 00:33:49

5 réponses

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 si et le crochet ouvert. Il faut lire:

function coolness() {

    if [ -z "" -o -z "" ]; then
        echo "Usage:  [sub_package] [endpoint]";
        exit 1;
    fi
    echo "Hi!"
}
21
répondu Cascabel 2009-09-30 20:54:02

Vous pouvez exporter des fonctions. Dans votre ~/.bashrc le fichier après avoir défini la fonction, ajouter export -f functionname.

function hello() {
   echo "Hello, !"
}

export -f hello

alors la fonction sera disponible à l'invite shell et aussi dans d'Autres scripts que vous appelez de là.

Modifier:

les parenthèses dans les énoncés conditionnels de Bash ne sont pas des parenthèses, ce sont des commandes. Ils doivent avoir des espaces autour d'eux. Si vous voulez grouper les conditions, utilisez les parenthèses. Voici votre fonction:

function coolness() {

    if [ -z "" -o -z "" ]; then
        echo "Usage:  [sub_package] [endpoint]";
        exit 1;
    fi
        echo "Hi!"
}

une meilleure façon d'écrire ce conditionnel est:

    if [[ -z "" || -z "" ]]; then

parce que les doubles crochets offrent plus de possibilités que les simples.

57
répondu Dennis Williamson 2017-10-05 22:56:57

incluez dans votre script la ligne

source .bashrc

source construire ça devrait marcher!

14
répondu Lopoc 2009-09-30 20:38:22

tout changement apporté à .bashrc n'entrera en vigueur qu'au cours d'une nouvelle session de terminal. Si vous voulez appliquer les modifications à votre session de terminal actuelle, vous devez demander au shell de relire le .bashrc. Le plus court chemin à pour cela est d'utiliser le . commande, qui est synonyme de source:

[user@linuxPc]$ . ~/.bashrc
9
répondu mihai 2018-02-16 06:12:08
$ source .bashrc
4
répondu PiedPiper 2009-09-30 20:39:46