我正在尝试转到当前目录和所有子目录,并在每个以 .sql 结尾的文件中添加一些注释
代码片段
HEADER="--SQL HEADER"
for f in 'find . -name *.sql';
do
echo $f
echo -e $HEADER > $f.tmp;
FNAME=${f//\//_/};
echo -e "\n\n--MORE ANNOTATIONS ${FNAME%.*}:1" >> $f.tmp;
cat $f >> $f.tmp;
mv $f.tmp $f;
rm $f.tmp
done;
我是 bash 的初学者,所以我认为我遇到的一些错误可能是由于循环中的 find 语句造成的 但这是我得到的错误
find . -name X.sql A.sql W.sql E.sql S.sql
./annotate.sh: line 6: $f.tmp: ambiguous redirect
./annotate.sh: line 8: $f.tmp: ambiguous redirect
./annotate.sh: line 9: $f.tmp: ambiguous redirect
mv: invalid option -- n
Try `mv --help' for more information.
rm: invalid option -- n
Try `rm --help' for more information.
任何帮助将不胜感激 =)
最佳答案
问题来了。你的“echo ”泄露了它:
echo $f
输出
find . -name X.sql A.sql W.sql E.sql S.sql
我认为问题在于您在 find 命令中使用的是直单引号 (''),而不是反引号 (``)。所以它并没有真正运行查找,而只是简单地扩展通配符。
您可能必须引用通配符,以便将其传递给查找而不是由 shell 求值:
for f in `find . -name \*.sql`;
但是,您的脚本中存在几个问题,如果您想多次使用它,您应该解决这些问题。参见 ormaaj's answer .
关于linux - 模棱两可的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235146/