我有一个文件目录,我想打印出他们的结果并将其保存到文件中。如果我执行以下操作,我可以转储到STDOUT:
echo "[";
for i in ./*; do
[[ -f $i ]] && cat $i;
echo ",";
done;
echo "]"
但如果我这样做:
echo "[" < myfile.txt;
for i in ./*; do
[[ -f $i ]] && cat $i << myfile.txt;
echo "," << myfile.txt;
done;
echo "]" << myfile.txt
我陷入无限循环。有什么想法吗?
答案 0 :(得分:2)
问题是您在.
中创建了一个文件,然后同时阅读和写入文件。您需要将myfile.txt
存储在与您正在处理的目录不同的目录中。
另外,我建议将此方法作为您正在做的更短的形式:
{ echo "[";
for i in ./*; do
[[ -f $i ]] && cat $i;
echo ",";
done;
echo "]"
} > ../myfile.txt
答案 1 :(得分:1)
假设您使用的是>>
,那么某些时候$i
将等于myfile.txt
,并且您会尝试将其附加到自身......