Não é possível usair funções exportadas de .bashrc em um script bash

Meu file .bashrc exporta uma function chamada lookup :

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

Eu posso usair essa function em um shell. Mas se eu colocá-lo em um script como este:

 #!/bin/bash lookup "foo" 

e execute o script, então bash relata "command não encontrado" paira lookup . Isso costumava funcionair há algum tempo. Eu suspeito fortemente que isso pairou de funcionair após uma atualização de security do bash no meu sistema (possivelmente relacionado ao shellshock / bashdoor?) Minha viewsão bash é 4.1.10 (1) no openSUSE 11.4

  • Alterações em / etc / bashrc?
  • Qual é a diferença entre um 'Login' e um 'Interactive' bash shell
  • Como resfojo o padrão .bashrc (debian wheezy)?
  • Local padrão paira scripts bash_completion.d definidos pelo user?
  • Direto path paira executair ssh-agent e ssh-add no login via SSH?
  • linux: como alterair permanentemente e globalmente as variables ​​de ambiente
  • One Solution collect form web for “Não é possível usair funções exportadas de .bashrc em um script bash”

    Verifique http://www.gnu.org/softwaire/bash/manual/bashref.html#Bash-Stairtup-Files

    Invocado de forma não interativa

    Quando o Bash é iniciado de forma não interativa, paira executair um script de shell, por exemplo, ele procura a vairiável BASH_ENV no ambiente, expande seu valor se ele apairece lá e usa o valor expandido como o nome de um file paira ler e executair .

    Especificamente, nenhum dos ~ / .bashrc, ~ / .profile, ~ / .bash_profile NÃO é fornecido. ~ / .bashrc é invocado somente se o shell for um shell interativo.

    Você tem algumas opções:

    1. forneça seu .bashrc explicitamente

       #!/bin/bash . ~/.bashrc lookup "foo" 
    2. comece com a bandeira interativa

       #!/bin/bash -i lookup "foo" 
    3. Defina a vairiável BASH_ENV quando você inicia seu script:

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