Linux 为什么svn2git会导致bash脚本中的循环中断?

Linux 为什么svn2git会导致bash脚本中的循环中断?,linux,bash,svn2git,Linux,Bash,Svn2git,我正在尝试使用svn2git将一些模块从SVN迁移到GIT。我在.csv文件中有一个模块列表,如下所示: pl.com.neokartgis.i18n;pl.com.neokartgis.i18n;test-gis;svniop pl.com.neokartgis.cfg;pl.com.neokartgis.cfg;test-gis;svniop pl.com.neokart.db;pl.com.neokart.db;test-gis;svniop ls /etc | while read f

我正在尝试使用svn2git将一些模块从SVN迁移到GIT。我在.csv文件中有一个模块列表,如下所示:

pl.com.neokartgis.i18n;pl.com.neokartgis.i18n;test-gis;svniop
pl.com.neokartgis.cfg;pl.com.neokartgis.cfg;test-gis;svniop
pl.com.neokart.db;pl.com.neokart.db;test-gis;svniop
ls /etc | while read file; do
    echo "filename: $file"
    cat > /tmp/data
done
cat $LIST | gawk -F";" '{ print $2; }' | while read module_to_import
do
    echo "before import $module_to_import"
    importToGitModule "$module_to_import" < /dev/null
done
我想将每个模块迁移到单独的GIT存储库。我尝试了以下脚本,该脚本从.csv文件读取模块列表,并在循环中导入每个模块:

#!/bin/bash

LIST=$1
SVN_PATH=svn://svn.server/path/to/root
DIR=`pwd`

function importToGitModule {
    cd $DIR

    rm -rf /bigtmp/svn2git/repo
    mkdir /bigtmp/svn2git/repo
    cd /bigtmp/svn2git/repo
    svn2git --verbose $SVN_PATH/$1  
    #some other stuff with imported repository
}

cat $LIST | gawk -F";" '{ print $2; }' | while read module_to_import
do
    echo "before import $module_to_import"
    importToGitModule "$module_to_import";
done;
问题是脚本在第一次迭代后结束。然而,若我删除对
svn2git
的调用,脚本将按预期工作,并为文件中的每个模块打印消息

我的问题是:为什么这个脚本在第一次迭代后结束,我如何更改它以导入循环中的所有模块

编辑:

以下版本的循环工作正常:

for module_to_import in `cat $LIST | gawk -F";" '{ print $2; }'`
do
    echo "before import $module_to_import"
    importToGitModule "$module_to_import";
done;

那么,为什么读取时
不起作用呢?

我怀疑您的循环中有什么东西——可能是
svn2git
过程的一部分——正在消耗
stdin
。考虑这样的循环:

pl.com.neokartgis.i18n;pl.com.neokartgis.i18n;test-gis;svniop
pl.com.neokartgis.cfg;pl.com.neokartgis.cfg;test-gis;svniop
pl.com.neokart.db;pl.com.neokart.db;test-gis;svniop
ls /etc | while read file; do
    echo "filename: $file"
    cat > /tmp/data
done
cat $LIST | gawk -F";" '{ print $2; }' | while read module_to_import
do
    echo "before import $module_to_import"
    importToGitModule "$module_to_import" < /dev/null
done
无论
/etc
中有多少文件,此循环只运行一次。此循环中的
cat
将消耗
stdin
上的所有其他输入

您可以通过从
/dev/null
显式重定向
stdin
来查看是否遇到了相同的情况,如下所示:

pl.com.neokartgis.i18n;pl.com.neokartgis.i18n;test-gis;svniop
pl.com.neokartgis.cfg;pl.com.neokartgis.cfg;test-gis;svniop
pl.com.neokart.db;pl.com.neokart.db;test-gis;svniop
ls /etc | while read file; do
    echo "filename: $file"
    cat > /tmp/data
done
cat $LIST | gawk -F";" '{ print $2; }' | while read module_to_import
do
    echo "before import $module_to_import"
    importToGitModule "$module_to_import" < /dev/null
done
cat$LIST | gawk-F“{print$2;}”|读取模块_至_导入时
做
echo“导入前$module\u到\u导入”
importToGitModule“$module\u to\u import”
尝试在子shell中运行
svn2git
(svn2git--verbose“$SVN_PATH/$1”)
不幸的是,这没有帮助,谢谢您的解释!