work.log

元エンジニアの備忘録的ブログ

PerlとかPHPで外部コマンドを実行した時の戻り値を判定する

投稿:2014-03-18 17:25  更新:

Perl とか PHP で書いたスクリプト中で実行した外部コマンドの戻り値を取得するメモ。

例えば、ls コマンドを叩く時に Perl なら「`ls hoge`;」、PHP なら「exec( ‘ls hoge’ );」と書けばとりあえず実行はできますが、それが正しく終了したかどうかを判定したいという感じです。

では早速コードから。

Perl の場合

#!/usr/bin/perl

use strict;
use warnings;

    my @output = `/bin/ls hoge 2>&1`;

    if (!$?) {

        print "OK: exit = $?\n";

    } else {

        print "NG: exit = $?\n";

    }

exit;

perl の場合は特殊変数の $? に外部コマンドの終了ステータスが入るのでこれで判定する。

詳細にまでは追っていないが、シェルの終了ステータスは「0」以外は異常終了扱いらしい。エラーコードはコマンドによってマチマチな場合があるので調べると切りがなかったりもする。

コマンドの標準出力と標準エラーは適当な変数に「2>&1」として実行結果を入れてやれば OK。

PHP の場合

<?php

        exec( '/bin/ls hoge 2>&1', $output, $exit );

        if ( ! $exit ) {

                echo "OK: exit = $exit\n";

        } else {

                echo "NG: exit = $exit\n";

        }
?>

PHP は exec のオプションパラメーターを使うと、任意の変数に外部コマンドの実行結果と終了コードを入れる事ができるので、後はこれで判定という感じです。

これに限らずですが、コマンドの標準エラーを取るには適当な変数に「2>&1」として実行結果を入れてやれば OK。

以上です。