1

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

各モジュールを個別の 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;

では、なぜwhile read機能しないのでしょうか。

4

1 に答える 1