Est-il possible de find un file dans bash, mais de sauter des fonctions spécifiques?

Supposons que j'ai bash_functions.sh :

 function test(){ } function test2(){ } 

Et dans mon ~/.bashrc je fais:

 source ~/bash_functions.sh 

Est-il possible, lors de l'approvisionnement, d'éviter de s'approvisionner en une fonction spécifique? Je veux dire, source tout dans bash_functions.sh , sauf pour le test ?

Dans une définition de fonction foo () { … } , si foo est un alias, il est développé. Cela peut parfois être un problème, mais ici, ça aide. Alias foo à un autre nom avant de searchr le file, et vous définirez une fonction différente. En bash, l'extension alias est désactivée par défaut dans les shells non-interactifs, donc vous devez l'activer avec shopt -s expand_aliases .

Si sourced.sh contient

 foo () { echo "foo from sourced.sh" } 

alors vous l'utilisez de cette façon

 foo () { echo "old foo" } shopt -s expand_aliases # necessary in bash; just skip in ash/ksh/zsh alias foo=do_not_define_foo . sourced.sh unalias foo; unset -f do_not_define_foo foo 

alors vous obtenez old foo . Notez que le file source doit utiliser la syntaxe de définition de fonction foo () { … } , et non la function foo { … } , car le mot key function bloque l'expansion d'alias.

Pas exactement, cependant, vous pouvez replace la fonction test (). La dernière définition de la fonction est toujours prioritaire. Donc, si vous générez un file qui a test() puis définissez une fonction avec le même nom, la dernière fonction replacea celle qui a été source. J'en profite pour apporter une certaine objectivité dans certains de mes scripts.

Exemple:

bash_functions.sh:

 test(){ echo "This is the test function from bash_functions." } test2(){ echo "This is the test2 function from bash_functions." } 

scripty_scripterson.sh

 test2(){ #this is thrown in just to show what happens in #the other direction echo "This is the test2 function from scripty." } source bash_functions.sh test1(){ echo "This is the test1 function from scripty." } test1 test2 

Sur la command line:

 $ ./scripty_scripterson.sh This is the test1 function from scripty. This is the test2 function from bash_functions. 

Vous pouvez créer un file temporaire, le lire et le supprimer par la suite. Pour supprimer la fonction 'test', je suppose ici qu'il n'y a pas de '}' dans la fonction.

 sed '/test()/,/}/d' testrc > ./tmprc && source ./tmprc && rm tmprc 

Ce n'est pas possible. Vous pouvez split bash_functions.sh en 2 files, un inclure ce que vous voulez générer et un autre inclure les fonctions que vous ne voulez pas générer. et utiliser un 3ème file de script pour les combiner pour un usage normal.