Você não precisa do operador $() nos comandos sudo sh -c ... .
Quando você usa esse operador para sed '$a\' ${filePath} > ${filePath}.bak , então sed e o redirecionamento para os comandos file > são executados primeiro sob os direitos b do usuário, que são insuficientes para gravação. E somente depois que sudo sh -c é executado na saída dos comandos anteriores.
Use sudo sh -c "sed ..." e sudo sh -c "echo ..." .