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

1

Meu arquivo .bashrc exporta uma função chamada lookup :

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

Eu posso usar essa função em um shell. Mas se eu colocar em um script como este:

#!/bin/bash
lookup "foo"

e execute o script e depois os relatórios "comando não encontrado" para lookup . Isso costumava funcionar há algum tempo. Eu suspeito strongmente que isso parou de funcionar após uma atualização de segurança do bash no meu sistema (possivelmente relacionado ao shellshock / bashdoor?) Minha versão bash é 4.1.10 (1) no openSUSE 11.4

    
por Jan Stolarek 13.11.2015 / 17:52

1 resposta

5

Verifique se o link

Invoked non-interactively

When Bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.

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

Você tem algumas opções:

  1. fonte seu .bashrc explicitamente

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

    #!/bin/bash -i
    lookup "foo"
    
  3. defina a variável BASH_ENV ao iniciar seu script:

    BASH_ENV=$HOME/.bashrc /path/to/my/script
    
por 13.11.2015 / 18:45

Tags