Como criar uma função bash compatível com sh

1

Eu tenho essa função bash:

zmx(){
 "$@"  \
      2> >( while read line; do echo -e "r2g: $line"; done ) \
      1> >( while read line; do echo -e "r2g: $line"; done )
}

esta função só deve ser originada e executada por bash, mas por alguma razão esquecida por Deus, ela está sendo originada / executada por sh.

Você usa a função acima assim:

zmx foo bar

e irá pré-adicionar r2g: ao stdout / stderr do comando foo.

Então, minha pergunta é: alguém sabe como traduzir a função bash acima para algo com o qual sh pode trabalhar?

Neste momento, recebo um erro de sintaxe quando o sh interpreta essa função. Eu tenho lutado por meses para descobrir por que sh é invocado para interpretar a função, mas eu praticamente desisti de tentar evitar que sh fizesse isso.

    
por Alexander Mills 13.07.2018 / 09:39

2 respostas

2

Veja outra abordagem que funciona com o POSIX sh :

zmx() {
    "$@" 2>&1 | sed 's/^/r2g: /'
}

Isso evita ter que lidar com as sutilezas de read .

Para verificar esses snippets de shell, você pode usar o ShellCheck : adicione um #!/bin/sh shebang para dizer que deseja usar um POSIX shell, e ele vai te dizer o que corrigir.

    
por 13.07.2018 / 09:47
1

O seguinte deve funcionar em sh :

"$@" 2>&1 | while read line ; do echo -e "r2g: $line" ; done

Observe que o comportamento de echo -e pode ser diferente em sh (por exemplo, pode realmente gerar -e r2g: ... .)

    
por 13.07.2018 / 09:47