このコードを見てください:
while read -t 3 line; do
echo ${line}
done < /opt/data.log
data.log
先入選出方式です。プロセスはここに書いており、コードはそれを読んでユーザーに表示する必要があります。しかし、3秒以内にfifoにもはやデータがない場合は終了したいと思います。
問題は決してタイムアウトしないことです。私はこのfifoに書いて、次のようなものを見せます。
read: 6: Illegal option -t
何が問題なの?
【書き直す】
はい、私は/bin/sh
シンボリックリンクであるshebangを使用していますdash
。に変え/bin/bash
たのに役に立ちませんでした。誰もfifoを開かないと永遠に待ちます。 FIFOのもう一方の端が開いていないときに機能するタイムアウトソリューションが必要です。
答え1
バッシュを使っていますか?または他のもの? read -t
kshismです(bashとzshもサポートしていますが、標準ではありません)。
bashでは機能しますが、ダッシュでは機能しません。
$bash -c 'echo foo | bashは同時に-t 3 xxxxを読みます。 金持ち
$ dash -c 'echo foo |また、読み取り-t 3 xxxx; ダッシュ: 1: 読み取り: 無効なオプション -t
答え2
私はこれを行う良い方法を見つけました。
exec 5<>/opt/data.log
while read -7 3 line <& 5; do
echo ${line}
done
スクリプトが永久にブロックされないように、読み書き用に開きます。説明は次のとおりです。 https://stackoverflow.com/a/4875924/654269