Eu preciso executar um número de comandos do shell canalizado de um script não-BASH (ou seja, script PHP) como estes:
command1 | command2 | command3
de modo que, se command1 falha com um código de saída diferente de zero, o outro comando também falha. Até agora, o que eu tenho é:
set -o pipefail && command1 | command2 | command3
Mas apesar de funcionar bem no terminal, ele produz isso se executado a partir do script:
sh: 1: set: Opção ilegal -o pipefail
/bin/sh set -o pipefail diz /bin/sh: 0: Can't open set (mesma coisa com sudo ). Espero ter testado direito. O sistema é o Ubuntu 12.
/bin/sh -c "set -o pipefail"; como estava, o shell estava tentando executar um script no diretório atual chamado set e não encontrou.
/bin/sh -c "set -o pipefail" não está funcionando, no entanto bash -c "set -o pipefail" faz.
/bin/sh que não reconhece set -o pipefail. Conseqüentemente, você precisará garantir que o script seja executado por /bin/bash ao invés de /bin/sh. Ou, se você estiver confiante, corajoso - e provavelmente imprudente - mude /bin/sh para ser um link para, ou cópia de, /bin/bash em vez de qualquer shell que esteja atualmente vinculado ou uma cópia dele. Se você tem certeza de que /bin/sh é bash, então você está usando um comportamento que bash não expõe quando executado como /bin/sh; usar bash Como bash.
/bin/shnão gostaset -o pipefail. É realmentebashdisfarçado, ou é uma casca diferente? Quandobashé executado como/bin/shaceitaset -o pipefail?