使用linux csh脚本在许多子目录中执行makefile

时间:2014-04-09 15:43:30

标签: linux shell scripting makefile csh

我正在尝试编写一个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变量。关于变通方法的任何想法。

非常感谢和快乐的编码

2 个答案:

答案 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