bash:在管道find和grep时设置内部循环变量

时间:2017-11-17 15:29:16

标签: linux bash

我有一个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脚本。我不知道是否重要。

0 个答案:

没有答案