Isso provavelmente não resolverá seu problema, apenas tire um momento para algumas notas, muito tempo para um comentário:
-
Se você não precisa fazer isso, não estruture seu código como uma única linha, estou citando:
r2g_internal "$@" 2> >( while read line; do echo "r2g error: $line"; done ) 1> >( while read line; do echo "r2g: $line"; done )
É ilegível para os outros e até para você eu suspeito.
-
Vou começar do começo:
Não vejo shebang como:
#!/bin/bash
ou
#!/bin/sh
e assim por diante.
-
Se você não precisa do Bash, mas este script de shell parece precisar dele, use POSIX
sh
para fins de portabilidade. -
Como
exit_code
é usado apenas uma vez, você pode evitá-lo. -
Você não precisa citar o número sempre. Nesta instância
"$?"
. -
Evite
[[ .. ]]
específico do Bash e use o comando de teste clássico. Neste caso:if [ $? -ne 0 ]
-
Você não precisa de ponto-e-vírgula no final da linha, você pode usar estrutura como esta:
if [ $? -ne 0 ] then echo "something experienced an error, to see log, run: r2g_view_log" return 1 fi
-
Use a opção
-r
comread
. Leia mais sobre este tópico aqui . -
Eu fiz alguns ajustes, confira, por favor.
-
Não tenho certeza se isso é intencional, mas suponho que não; onde você usou
return 1
, pelo que eu posso ver, deve serexit 1
. -
A shebang pode conter
set -e
da seguinte forma:#!/bin/bash -e
Reescrito com base no acima:
#!/bin/bash -e
r2g()
{
echo "executable name is: $0"
r2g_internal "$@" 2> >( while read -r line; do echo "r2g error: $line"; done ) >( while read -r line; do echo "r2g: $line"; done )
if [ $? -ne 0 ]
then
echo "something experienced an error, to see log, run: r2g_view_log"
exit 1
fi
}