外部コマンドの実行結果を 1 行ごとに取得する (bash) - Linux シェルスクリプトプログラミング

PROGRAM


外部コマンドの実行結果を 1 行ごとに取得する (bash)

Linux シェルスクリプトでは、外部コマンドを簡単に呼び出せるようになっています。

その方法については 外部コマンドを実行して結果を変数に代入する で触れましたけど、外部コマンドを実行して得た結果を 1 行ごとに解析して処理を続けたい場合もあると思います。

外部コマンドを実行した結果を 1 行ずつ取得するには、bash 限定になるようですけど、次のようにして行うことができました。

#!/bin/bash

 

while read LINE

do

# たとえば、実行結果を 1 行ずつ、先頭に ">> " をつけて表示します。

echo ">> $LINE"

 

done < <(/usr/sbin/pppd call $NAME updetach)

少しややこしいコマンドを実行していますが、ともあれ done の後に " < <" と続けて、括弧の中に実行したいコマンド(ここでは "/usr/sbin/pppd call $NAME updetach")を記載することで、このコマンドの実行結果を 1 行ずつ LINE という名前の変数に格納して、do-done ブロック内の処理を行うことができました。

留意事項としては、"<" と "<" との隙間にちゃんと空白を挟まないといけないことや、実行環境は sh ではなく bash にしなくてはいけないところでしょうか。


[ もどる ]