11
votes

Comment définir une fonction Bash pour une utilisation dans n'importe quel script?

Je voudrais le définir une fois et l'utiliser n'importe où.


0 commentaires

4 Réponses :


2
votes

Mettez-le dans votre ~ / .bashrc ou ~ / .bash_profile .


5 commentaires

.bash_profile ne provient que par la coque de connexion, donc .CASHRC est le bon endroit pour les fonctions et les alias. Il est différent des variables d'environnement, qui sont transmises au processus d'enfant de parent.


Je l'ai essayé dans les deux fichiers et ouvert de nouvelles fenêtres de terminal et cela ne fonctionne pas non plus. J'ai essayé de l'exporter de .Cashrc et cela n'aide pas non plus.


Cependant, la "fonction Compgen -A" peut le trouver.


@Cababunga: Non! Mettez-le dans ~ / .bash_profile et suivez-le avec Exporter -f Funcname.


@ grok12 Si vous écrivez à partir d'un processus parent, tel que si vous exécutez : sh à partir de vim , tout ce qui apparaît dans .bash_profile seulement , et pas dans .bstrucc , ne sera pas visible dans cet environnement.



7
votes

in Bash, vous pouvez exécuter source à partir de votre script (avec le fichier contenant vos fonctions comme argument) et appelez simplement la fonction. C'est ce qui se passe implicitement lorsque vous définissez la fonction dans votre fichier .bstrucc .


1 commentaires

Oui, réponse courte: Importez le script avec le Source ou un point unique . , commande



5
votes

Bien que je suis essentiellement d'accord avec @eduffy, j'ai généralement mis de telles fonctions dans un fichier dans le répertoire de base de l'utilisateur ou si les scripts sont partagés entre les utilisateurs d'un répertoire dans le chemin de l'utilisateur. Je ferais ensuite la source du fichier (. ~ / Fichier ou. $ (Fichier de type -p)) dans le .bash_profile. Cela vous permet de "re-source" le fichier si nécessaire (c'est-à-dire que vous modifiez quelque chose dedans) sans avoir à se connecter, etc.


2 commentaires

Mais tous les lecteurs doivent également réaliser que vous devez exporter le nom de la fonction comme ceci: Export -f Funcname.


L'exportation est généralement facultative pour les fichiers source car ils sont exécutés dans l'environnement dans lequel ils sont exécutés. Tout ce qui est défini dans le fichier sera disponible dans la coque de l'utilisateur pour les scripts suivants (sauf non défini). L'exportation est nécessaire lorsque vous souhaitez effectuer une variable (ou une fonction) visible aux sous-coquilles lors de l'exécution de la coque mère.



3
votes

Placez votre fonction "commune" dans un script distinct (appelons-le "A"):

#!/bin/bash

. ./a

test_fun


1 commentaires

Cela n'a pas fonctionné pour moi. Cependant, faire source ../ a travaillé, comme décrit dans cette réponse. Stackoverflow.com/a/1016415/16524