linux - 模棱两可的重定向

标签 linux bash redirect

我正在尝试转到当前目录和所有子目录,并在每个以 .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/

相关文章:

Bash 脚本 : Illegal alias names

linux - 来自键盘的变量等于bash

redirect - TYPO3:404用于限制访问页面而不是登录表单

.htaccess 重定向而不更改地址栏

linux - 使用 -fPIC 编译的共享库的内存映射和变量位置

python - 如果一个 python 模块说它依赖于 debhelper 和 cdbs,是否没有办法让它在非 debian linux 上运行?

linux - Tee 命令 unix

在 shell 中重定向输入和输出的代码

php - PHP和Shell中return后主进程如何运行

php - 使用 PHP session 在表单之间保存数据是否正确?