これらのような非BASHスクリプト(つまり、PHPスクリプト)からパイプされたシェルコマンドをいくつか実行する必要があります。
command1 | command2 | command3
そのため、command1ゼロ以外の終了コードで失敗した場合、他の各コマンドも失敗します。これまでのところ、私が思いついたのは:
set -o pipefail && command1 | command2 | command3
ただし、ターミナルからは正常に実行されますが、スクリプトから実行されると、次のようになります。
sh:1:set:無効なオプション-o pipefail
@JonathanLeffler実行
—
デスモンドヒューム
/bin/sh set -o pipefailすると、/bin/sh: 0: Can't open set(と同じことsudo)と表示されます。私が正しくテストしたことを願っています。システムはUbuntu 12です
試してみる必要があり
—
ジョナサンレフラー
/bin/sh -c "set -o pipefail"ます。現状では、シェルは呼び出された現在のディレクトリでスクリプトを実行しようとしましたが、set見つかりませんでした。
@JonathanLeffler
—
デズモンドヒューム
/bin/sh -c "set -o pipefail"は動作しませんが、動作bash -c "set -o pipefail"します。
だから、あなたの問題は、
—
ジョナサンレフラー
/bin/sh認識されないスクリプトが実行されることset -o pipefailです。したがって、スクリプトがの/bin/bash代わりに実行されることを確認する必要があります/bin/sh。または、自信がある場合は、勇気があり、おそらく愚かであっ/bin/shても、/bin/bash現在リンクしているシェルまたはコピーの代わりに、リンクまたはコピーに変更します。そうだと確信している場合/bin/shはbash、次のbashように実行したときに公開されない動作を使用してい/bin/shます。bashとして使用しbashます。
/bin/sh好きではありませんset -o pipefail。それは実際bashに変装していますか、それとも別のシェルですか?bashとして実行される場合/bin/sh、受け入れられset -o pipefailますか?