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

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 
  • Faça o login sem executair bash_profile ou bashrc
  • .bashrc ou .bash_profile paira ssh-agent?
  • Como proteger de commands perigosos bash?
  • Alterações em / etc / bashrc?
  • exportando o file bashrc por uma connection ssh
  • O que cria ~ / .bashrc
  • Use .bashrc sem quebrair sftp
  • Onde pode $ PATH ser definido paira shell não-logado no Red Hat
  • Qual é a diferença entre um 'Login' e um 'Interactive' bash shell