
STDINで行を読み取って処理する必要があります。次のようにできます。
<print lines to STDOUT> | while read line; do
<process $line>
done
しかし、これが意味するのは最初すべてのラインが印刷されパイプされます。それから処理されます。次の行がSTDOUTに送信される前に、各行をすぐに処理したいと思います。
行が作成されたとき(ログファイルなど)を処理する必要がある場合に便利です。私の使命はシバ(警告!このページはFirefoxと競合しています...)複数のQRコードをスキャンして、FirefoxでそのURLを開きます。実行している場合は、zbarcam --raw
Webカメラを使用してQRコードをスキャンしてください。 QRコードが見つかると、URLはすぐにSTDOUTに印刷されますが、zbarcamは終了しません。だから私はこの行を読んで上下に移動したいと思いますfirefox $url
(しかし他のURLを待っていません)。
私が見つけた離れたしかし、これを簡単に行うことはできないのだろうか。デフォルトでは、彼はzbarcam
一時ファイルに出力を書き、その中に何かが書き込まれるのを待ちます。
zbarcam --raw > tmpfile &
...
while [[ ! -s $tmp ]] ; do
sleep 1
done
一時ファイルやループなしでこれを実行できますかsleep 1
?
答え1
最初の試みは成功しました。
tail -f temp.file | while read LINE; do firefox $LINE; done
次に、他の端末では、tail -fがSTDOUTに1行を印刷するように一時ファイルに追加します。
echo 'google.com' >> temp.file
Firefoxはこれを行うたびに新しいタブを開きます。
答え2
いくつかの努力の終わりに部分的な解決策を見つけました。
zbarcam --raw|xargs -L1 firefox
重要な部分は、1行だけを読み取るように-L1
指示するパラメータです。xargs
最初のQRコードを読み、Firefoxを実行します。zbar
その後、まだ実行されますが、2番目のQRコードをスキャンすることはできません(xargs
何とか再度呼び出す必要があります)。
答え3
非常に近いです:
zbarcam --raw | xargs -n 1 chromium-browser
これは私にとってうまくいき、各スキャンは新しいタブで終わります。