Eu testei isso:
~$ test() { echo foo |sed -r s/.*(.)/\\1/g; }
~$ test
o
Até agora tudo bem. Mas então:
~$ export -f test
~$ bash -c ''
bash: test: line 0: syntax error near unexpected token `('
bash: test: line 0: `test () { echo foo | sed -r s/.*(.)/\\1/g'
bash: error importing function definition for `test'
Eu sei que usar aspas com sed
resolve o problema. Mas o bash não exportar uma função que executa é alarmante e requer explicações, regras e casos.
Eu esperaria que o bash fosse capaz de lidar com suas próprias citações, então acho que pode ser apenas um bug.
Suspeito que você tenha 2 versões de
bash
em seu sistema e que, ao chamarbash -c ''
, esteja invocando uma versão diferente. Isso ou seu código foi alterado quando você criou a pergunta.Quanto ao motivo pelo qual acho isso, seu código não funciona no meu sistema:
O problema é que você não tem aspas em torno da
sed
expressão, então o bash está tentando interpretá-la como uma expressão de shell. Eu estou supondo que esse comportamento mudou entre as versões bash, e que seu shell de login é uma versão diferente dobash
que está em seu$PATH
ao chamarbash -c ''
.Você pode verificar isso fazendo:
Outra causa possível seria se você tivesse algumas opções de shell definidas que estão alterando o comportamento da avaliação da expressão do bash e essas opções não estão sendo usadas pelo
bash -c ''
.Quanto a como corrigir o problema, quando cito corretamente a
sed
expressão, funciona bem:(Observação: tive que ajustar ligeiramente o
sed
comando, pois não é um comando válido para minha versão dosed
)