Ho bisogno di eseguire un numero di comandi shell convogliati da uno script non BASH (vale a dire script PHP) come questi:
command1 | command2 | command3
in modo che, se command1fallisce con un codice di uscita diverso da zero, anche l'altro comando fallisce. Finora, quello che ho escogitato è:
set -o pipefail && command1 | command2 | command3
Ma anche se funziona bene dal terminale, produce questo se eseguito dallo script:
sh: 1: set: opzione illegale -o pipefail
/bin/sh set -o pipefaildice /bin/sh: 0: Can't open set(stessa cosa con sudo). Spero di averlo provato bene. Il sistema è Ubuntu 12.
/bin/sh -c "set -o pipefail"; com'era, la shell stava cercando di eseguire uno script nella directory corrente chiamata sete non l'ha trovata.
/bin/sh -c "set -o pipefail"non funziona, tuttavia bash -c "set -o pipefail"funziona.
/bin/shche non riconosce set -o pipefail. Di conseguenza, dovrai assicurarti che lo script sia eseguito al /bin/bashposto di /bin/sh. Oppure, se sei sicuro, coraggioso - e probabilmente insensato - cambia /bin/shper essere un link o una copia di, /bin/bashinvece di qualunque shell a cui è attualmente collegato o una copia di. Se sei sicuro che lo /bin/shsia bash, allora stai usando un comportamento che bashnon espone quando eseguito come /bin/sh; usa bashcome bash.
/bin/shnon mi piaceset -o pipefail. In realtà èbashsotto mentite spoglie o è un guscio diverso? Quandobashviene eseguito come/bin/sh, accettaset -o pipefail?