Suspeito que você tenha duas versões de bash
em seu sistema e que, quando estiver chamando bash -c ''
, esteja invocando uma versão diferente. Isso ou seu código foi alterado quando você criou a pergunta.
Quanto a por que eu acho isso, seu código não funciona no meu sistema:
$ test() { echo foo |sed -r s/.*(.)/\1/g; }
bash: syntax error near unexpected token '('
O problema é que você não tem aspas em torno da expressão sed
, então o bash está tentando interpretá-lo como uma expressão shell. Eu estou supondo que este comportamento mudou entre as versões bash, e que o seu shell de login é uma versão diferente de bash
do que o que está no seu $PATH
ao chamar bash -c ''
.
Você pode verificar isso fazendo:
$ echo $SHELL
$ which bash
Outra possível causa seria se você tivesse algumas opções de shell configuradas que estivessem alterando o comportamento da avaliação de expressão do bash, e essas opções não estão sendo usadas pelo bash -c ''
.
Quanto a como corrigir o problema, quando eu cito corretamente a expressão sed
, tudo funciona bem:
$ test() { echo foo | sed 's/.*\(.\)//g'; }
$ export -f test
$ bash -c 'test'
o
(Nota: eu tive que ajustar levemente o comando sed
, pois não é um comando válido para a minha versão do sed
)