O problema é que a execução do script como nohup sh /path/to/your/script.sh
substitui o interpretador da linha shebang. Quando chamado como sh
, então bash
desativa certos recursos (que provavelmente é semelhante com outros shells) e, portanto, não pode mais analisar a substituição do processo.
A solução é garantir que bash
esteja sendo executado sem restrições. Isso pode ser feito verificando uma variável de ambiente e chamando o script novamente com bash
(em vez de sh
):
#! /bin/bash
if [ "YES" = "$RUNNING_AS_BASH" ]; then
eval 'cat <(echo "-----------")'
else
test -f "$0" || exit 1
RUNNING_AS_BASH="YES" exec bash "$0"
fi
Infelizmente bash
as sh
analisa toda a estrutura if
. Assim, para evitar o erro, a sintaxe incompatível deve estar oculta em uma instrução eval.
Isso pode ser evitado se a ação eval
for retirada da estrutura if
, porque o restante do script não é analisado:
#! /bin/bash
if [ "YES" != "$RUNNING_AS_BASH" ]; then
test -f "$0" || exit 1
RUNNING_AS_BASH="YES" exec bash "$0"
fi
cat <(echo "-----------")