パイプファイルを cat し、いくつかのデータを grep するようなコマンドを使用します。次のような単純なコード
temp=""
temp=$(cat file|grep "some data"| wc -c)
if [ $temp -gt 0 ]
then
echo "I got data"
fi
ファイルはパイプ(FIFO)で、データを出力し、停止しません。有限時間内に猫パイプのコマンドを終了するにはどうすればよいですか?
パイプファイルを cat し、いくつかのデータを grep するようなコマンドを使用します。次のような単純なコード
temp=""
temp=$(cat file|grep "some data"| wc -c)
if [ $temp -gt 0 ]
then
echo "I got data"
fi
ファイルはパイプ(FIFO)で、データを出力し、停止しません。有限時間内に猫パイプのコマンドを終了するにはどうすればよいですか?
grep|wc
この仕事には不適切なツールです。sed
など、より良いものを選択してください。
if sed -n -e '/some data/q;$q1' file; then
....
fi
awk
、
found=$(awk '/some data/{print"y";exit}' file)
if [ -n "$found" ]; then
....
fi
またはsh
それ自体。
found=
while read line; do
if expr "$line" : ".*some data" >/dev/null; then
found=y
break
fi
done <file
if [ -n "$found" ]; then
....
fi
3 行目の temp 変数に $ を追加しました。
if [ $temp -gt 0 ]
一時値を比較したいので、変数の前に $ を使用して取得します。
ファイル "pipe" については、特定の文字列を取得するまで cat を実行できます。つまり、読み取りには cat を使用し、たとえば "\n" を受け取ったら停止できます。
端末で実行できる例を示します。
cat > example_file.txt << EOF
hello
I'm a example filen
EOF
cat は、「EOF」を入力するまで標準入力から読み取ります。そして、ファイルの内容は次のようになります。
cat example_file.txt
hello
I'm an example file
このようにして、行などのチャンクで読み取ることができます。
それ自体の終了ステータスを確認するだけgrep
です:
if grep -q "some data" file; then
echo "I got data"
fi
は-q
、一致が見つかった場合に標準出力に何も書き込まれないようにします。