我正在尝试编写一个csh脚本,它将在子目录中执行makefile。到目前为止,我有这个:
find -maxdepth 2 -name 'Makefile' -print -execdir make \;
我遇到的问题是当我尝试运行它时出现以下错误:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
在这种情况下,我无法合理地更改$ PATH变量。关于变通方法的任何想法。
非常感谢和快乐的编码
答案 0 :(得分:5)
-execdir
标志是GNU find的一个特性,它的实现方式是抛出该错误,如果检测到它描述的情况则拒绝继续。 find
中没有选项来避免该错误。所以,您可以修复PATH
(您只能为find
命令本身执行此操作:
PATH=<fixed-path> find -maxdepth 2 -name 'Makefile' -print -execdir make \;
)或者不要使用Basile所描述的-execdir
。
错误......实际上是POSIX sh语法。 csh
支持吗?我没有使用csh
这么长时间以至于我记不住了,老实说这是一个如此糟糕的外壳,我不能去看看:-p: - )
答案 1 :(得分:2)
你可以尝试
find -maxdepth 2 -name 'Makefile' \
-exec sh -c "make -C $(dirname {})" \;
或(使用sh
语法)
for m in Makefile */Makefile */*/Makefile ; do
if [ -f "$m" ]; then
make -C $(dirname $m)
fi
done