2016-03-24 18 views
0

私はスクリプトを作成していますが、read -r lineがどの変数を使ってデータを取得するのかはわかりません。FILE変数から行ごとに読みたいと思います。それはあなたが複数のファイルを結合したいように、私は私がcatの合法的な使用法としてこれを考えるであろうと推測になりますので変数から1行ずつファイルを読む

#!/bin/bash 
cd "/" 
FILE="$(< /home/FileSystemCorruptionTest/*.chk)" 

while read -r line 
do 
    echo "$line" > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log 
done 

echo "" > /home/FileSystemCorruptionTest/Done 
+0

これはおもちゃの例ですか?なぜファイルを変数に読み込むのですか? –

+0

私はループの中に多くのwhileループがあるので、ファイルの内容を変数に読み込んでいます – visc

+0

これは、ファイルを単にログファイルに 'cat'しない理由を説明していません。あなたは実際に何を達成したいですか?シェルループを使用してファイルを行単位で処理することは、しばしば避けたいことです。 – tripleee

答えて

2

:ここ

は、私が働いているスクリプトです

cat /home/FileSystemCorruptionTest/*.chk | while read -r line 
do 
    echo "$line" 
done > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log 

リダイレクトをループから外して、ファイルを1行に1回上書きしないようにしました。

はまた、あなたの例では、簡単のように書くことができることに注意してください:あなたが唯一実際には1つのファイルを持っている(と変数内に格納したい)場合は

cat /home/FileSystemCorruptionTest/*.chk > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log 

、あなたはループの後<<<を使用することができます。

while read -r line 
do 
    echo "$line" 
done <<<"$FILE" > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log 

<<< "$FILE"は、ループの前にecho "$FILE" |を使用するのと同じ効果がありますが、それはすべてのサブシェルを作成しません。

echo "${FILE}" | while read -r line … 
をしかし、私はトムのソリューションが優れていると思う:あなたが要求している何

関連する問題