Necesito ejecutar varios comandos de shell canalizados desde un script que no sea BASH (es decir, un script PHP) como estos:
command1 | command2 | command3
de modo que, si command1falla con un código de salida distinto de cero, cada otro comando también falla. Hasta ahora, lo que se me ocurrió es:
set -o pipefail && command1 | command2 | command3
Pero a pesar de que se ejecuta bien desde la terminal, produce esto si se ejecuta desde el script:
sh: 1: conjunto: opción ilegal -o pipefail
/bin/sh set -o pipefaildice /bin/sh: 0: Can't open set(lo mismo con sudo). Espero haberlo probado bien. El sistema es Ubuntu 12.
/bin/sh -c "set -o pipefail"; tal como estaba, el shell intentaba ejecutar un script en el directorio actual llamado sety no lo encontró.
/bin/sh -c "set -o pipefail"no funciona, sin embargo, bash -c "set -o pipefail"sí.
/bin/shlo que no reconoce set -o pipefail. En consecuencia, deberá asegurarse de que el script se ejecute en /bin/bashlugar de hacerlo /bin/sh. O, si tiene confianza, valiente, y probablemente insensato, cambie /bin/shpara ser un enlace o copia de, en /bin/bashlugar de cualquier shell al que esté vinculado actualmente o una copia. Si está seguro de que /bin/shes así bash, está utilizando un comportamiento que bashno se expone cuando se ejecuta como /bin/sh; usar bashcomo bash.
/bin/shno le gustaset -o pipefail. ¿Está realmentebashdisfrazado o es un caparazón diferente? Cuandobashse ejecuta como/bin/sh, ¿aceptaset -o pipefail?