広告
広告
exec() 関数はシステムのコマンドを実行し元に戻ってきません。戻って欲しい場合には、system() 関数を使います。LIST に複数の引数がある場合か、LIST が複数の値を持つ配列の場合には、LIST の引数を使ってexecvp を呼び出します。1 つのスカラ引数のみの場合には、その引数からシェルのメタ文字をチェックします。もしメタ文字があれば、引数全体を /bin/sh -c に渡して解析させます。もしなければ、その引数を単語に分けより効率的な execvp() に直接渡します。exec() (と system()) は出力バッファをフラッシュしないので、出力をなくしたくなければ、$| を設定する必要があります。第一引数に指定するものを本当に実行したいが実行するプログラムに対して別の名前を教えたい場合には、LIST の前に、「間接オブジェクト」(コンマなし) として実際に実行したいプログラムを指定することができます。これによってLIST に単一のスカラしかなくても複数値のリストであるようにLIST の解釈を行ないます。
$shell = '/bin/csh'; exec $shell '-sh'; # login シェルの振りをする exec {'/bin/csh'} '-sh'; # login シェルの振りをする
exec '/bin/echo', 'Your arguments are: ', @ARGV; exec "sort $outfile | uniq";
広告