私は、出口ステータスをとするより汎用的な解決策を考えました。パイプ内の各コマンドはPHPで利用可能です。もちろん、$PIPESTATUS
のシェルが必要です(これは平文sh
を除く)。
// The command with pipes.
$command = 'command1 | command2 | echo Test | gzip -9 -f';
// Execute the command. The overall exit code is in $exitStatus.
exec(
$command . '; echo -e "\n"${PIPESTATUS[*]}',
$out,
$exitStatus
);
// Get the exit statuses and remove them from the output.
$pipeStatus = explode(' ', array_pop($out));
print_r([$pipeStatus, $out]);
// [
// [
// "127",
// "127",
// "0",
// "0",
// ],
// [
// b"\x1F‹\x089fÙW\x02I-.á\x02Â\x1Axú\x05",
// ],
// ]
少しシンプルなバリアントあなたはパイプで連結されたコマンドは改行で終了します確信している場合(コマンドでecho
一部が異なる気づく):
// The command with pipes.
$command = 'command1 | command2 | echo Testing things | sed s/things/stuff/';
// Execute the command. The overall exit code is in $exitStatus.
exec(
$command . '; echo ${PIPESTATUS[*]}',
$out,
$exitStatus
);
// Get the exit statuses and remove them from the output.
$pipeStatus = explode(' ', array_pop($out));
print_r([$pipeStatus, $out]);
// [
// [
// "127",
// "127",
// "0",
// "0",
// ],
// [
// "Testing stuff",
// ],
// ]
シリーズでそれらを実行しないのはなぜ?その後、簡単に伝えることができます。 – Machavity
@ e4c5、どのように質問が*類似しているのですか?バックアップについてではなく、終了ステータスについて質問しています。サンプルスクリプトはちょうど**データベースのバックアップスクリプトとなりました。 – aross
@Machavity、私は巨大な中間ファイルを望んでいません。 – aross