我有一个makefile并尝试使用bash脚本创建一些依赖项。所以我想找到包含一些特定文件的c和h文件。我创建了一个find
- grep
- while
- 管道。我的问题是,我的变量没有在while循环中设置。当我做对了,这是因为一个子shell将执行每个while循环。我第一次试图通过这个网站完成它here document没有成功。那么如何在循环中设置我的变量?
found_strings=0
found_fsdata=0
find $1 -type f -iname '*.[ch]' -print0 | while read -d '' file
do
#echo file ist $file
my_result_strings=`head -100 $file | grep 'http-strings.h'`
my_result_fsdata=`head -100 $file | grep 'httpd-fsdata-erw.h'`
if [ -n "$my_result_strings" ]
then
echo $file enthält $my_result_strings
echo "$(basename $file): http-strings.h" >> $1/Makefile.prebuild
echo "" >> $1/Makefile.prebuild
found_strings=1
echo "found_strings1 $found_strings"
fi
if [ -n "$my_result_fsdata" ]
then
echo $file enthält $my_result_fsdata
echo "$(basename $file): http-fsdata.h http-fsdata.c" >> $1/Makefile.prebuild
echo "" >> $1/Makefile.prebuild
found_fsdata=1
fi
done
if [ -n "$found_strings" ]
then
echo "Abhaenigkeit von http-strings.h hinzugefügt"
echo -e "http-strings.h:" >> $1/Makefile.prebuild
echo -e "\t@perl makestrings -d $1/\$(HTTP_STRINGS)">> $1/Makefile.prebuild
echo "" >> $1/Makefile.prebuild
fi
编辑: 这也行不通:
var=0
while read file
do
var=$var+1
done < <(find $1 -type f -iname '*.[ch]')
echo $var
因为我得到cannot make pipe for process substitution: Function not implemented
line 14: <(find $1 -type f -iname '*.[ch]'): ambiguous redirect
。我在windows7下的makefile中启动shell脚本。我不知道是否重要。