我是一名长期find
用户bash
,但这似乎是我第一次尝试find
在脚本中运行命令。
我试图循环遍历所有项目源文件以找到传递给几个函数的第一个参数。我已经编写并测试了一个小 awk 脚本,它似乎可以完成这项工作,我可以通过以下方式从命令行运行它
find sources -name '*.cpp' -exec awk -f foo.awk {} \;
当我尝试将其放入脚本中时,麻烦就来了,通过
echo find sources -name *.cpp -exec awk -f foo.awk {} \\\; >foo.sh
这样 foo.sh 包含
find sources -name *.cpp -exec awk -f foo.awk {} \;
如果我现在通过以下方式将其源到我的 bash shell 中
source foo.sh
我收到错误
查找:缺少“-exec”参数
我认为这是一个引用问题,所以我在最后一个分号之前加倍了反斜杠。这没有什么区别。只是为了笑,我尝试将反斜杠加三倍。还是没有区别。
完全披露:我在 Windows 10 上运行,在 cygwin 下,使用 GNU Awk 5.1.0。我一直使用 cat 编写脚本,所以我应该清除行结尾的任何问题
更新
但我不这样做。使用不同的 awk 脚本运行,我刚刚粘贴到这个问题中的脚本工作正常。明天我会再试一次并发布我的发现。
谢谢你的宽容。
答案1
这几乎可以肯定是因为您没有引用 ,*.cpp
因此它在传递到之前就被扩展了find
,或者,如果您*cpp
当前目录中有文件,甚至在写入脚本之前就被扩展了。
如果我是对的,这应该可以满足您的需要:
echo "find sources -name '*.cpp' -exec awk -f foo.awk {} \;" >foo.sh