Rubyからシェルコマンドを実行する(Kernel.#system ..etc)
調べていたので、書いていきます。
前提
- Ruby 2.2.10
外部コマンドの呼び出し
実装で利用したは、#system
, #`を利用していて、コマンドを実行して返却値、ステータスは無視するケースと返却値を利用するケースで分けて使っています。
Kernel.#system
引数を外部コマンドとして実行して、成功した時に真を返します。 子プロセスが終了ステータス 0 で終了すると成功とみなし true を返します。 それ以外の終了ステータスの場合は false を返します。 コマンドを実行できなかった場合は nil を返します。 終了ステータスは変数 $? で参照できます。 コマンドを実行することができなかった場合、多くのシェルはステータス 127 を返します。(したがって $? の数値は、0x7f00)、シェルを介 さない場合は Ruby の子プロセスがステータス 127 で終了します。 コマンドが実行できなかったのか、コマンドが失敗したのかは、普通 $? を参照することで判別可能です。
Kernel.#`
command を外部コマンドとして実行し、その標準出力を文字列として 返します。このメソッドは
command
の形式で呼ばれます。exec
引数で指定されたコマンドを実行します。 プロセスの実行コードはそのコマンド(あるいは shell)になるので、 起動に成功した場合、このメソッドからは戻りません。
Kernel.#spawn
引数を外部コマンドとして実行しますが、生成した 子プロセスの終了を待ち合わせません。生成した子プロセスのプロセスIDを返します。
サンプル
コードの切り抜きを載せます。このままだと動かないです。