将此bash命令的结果发送到文件时,我得到一个无限循环

时间:2011-07-07 23:04:05

标签: bash unix shell scripting

我有一个文件目录,我想打印出他们的结果并将其保存到文件中。如果我执行以下操作,我可以转储到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

我陷入无限循环。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

问题是您在.中创建了一个文件,然后同时阅读写入文件。您需要将myfile.txt存储在与您正在处理的目录不同的目录中。

另外,我建议将此方法作为您正在做的更短的形式:

{ echo "[";
for i in ./*; do
    [[ -f $i ]] && cat $i;
    echo ",";
done;
echo "]"
} > ../myfile.txt

答案 1 :(得分:1)

假设您使用的是>>,那么某些时候$i将等于myfile.txt,并且您会尝试将其附加到自身......