我正在编写一个脚本,并且不清楚read -r line
如何知道从哪个变量获取数据..我想从FILE变量逐行读取。
以下是我正在处理的脚本:
#!/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 :(得分:2)
由于您希望合并多个文件,我想我认为这是cat
的合法用法:
cat /home/FileSystemCorruptionTest/*.chk | while read -r line
do
echo "$line"
done > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log
请注意,我将重定向移出循环,以防止每行覆盖一次文件。
另请注意,您的示例可以轻松地写为:
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" |
具有相同的效果,但它不会创建任何子shell。
答案 1 :(得分:1)
您的要求:
echo "${FILE}" | while read -r line …
但我认为汤姆的解决方案更好。