3 votes

Impossible d'utiliser les fonctions exportées de .bashrc dans un script bash.

Mon .bashrc exporte une fonction appelée lookup :

lookup() {
  grep -r -ne "$1" * | grep -v "TAGS:" | grep -v "tags:"
}
export -f lookup

Je peux utiliser cette fonction dans un Shell. Mais si je la mets dans un Shell comme ceci :

#!/bin/bash
lookup "foo"

et exécuter le script alors bash rapporte "command not found" pour lookup . Cela fonctionnait il y a quelque temps. Je soupçonne fortement que cela a cessé de fonctionner après une mise à jour de sécurité de bash sur mon système (peut-être liée à shellshock/bashdoor ?) Ma version de bash est 4.1.10(1) sur openSUSE 11.4

8voto

marshally Points 2260

Vérifiez http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

Appelé de manière non-interactive

Lorsque Bash est lancé de manière non interactive, pour exécuter un Shell Shell, par exemple, il recherche la variable BASH_ENV dans l'environnement, développe sa valeur si elle y figure, et utilise la valeur développée comme nom de fichier à lire et à exécuter.

Plus précisément, aucun des fichiers ~/.bashrc, ~/.profile, ~/.bash_profile ne sont PAS sourcés. ~/.bashrc n'est invoqué que si le Shell est un Shell interactif.

Vous avez plusieurs options :

  1. sourcez votre .bashrc explicitement

    #!/bin/bash
    . ~/.bashrc
    lookup "foo"
  2. lancer bash avec l'option interactive

    #!/bin/bash -i
    lookup "foo"
  3. définir la variable BASH_ENV lorsque vous démarrez votre script :

    BASH_ENV=$HOME/.bashrc /path/to/my/script

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X