名前が空の複数のSQLファイルソース

名前が空の複数のSQLファイルソース

実は愚かなことを防いでいるのに…終わりが出ないですね。

PHPファイルとSQLパッチを含むgitリポジトリがあります。リポジトリを更新するたびにSQLパッチが必要であることを確認する必要があります。何かを使って遊ぶことを避けるために、最後のgit pullで提供されたすべてのSQLファイルを提供する小さなスクリプトを作成しました。

find $MY_DIR/scripts/sandbox/migrations -type f -newermt $(date +'%Y-%m-%d') ! -newermt $(date +'%Y-%m-%d' --date="tomorrow") -not -path "$MY_DIR/scripts/sandbox/migrations/generated/*"

これは私に提供され、出力は次のようになります。

/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.14 - script1.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.09.28 - script2.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.15 - script3.sql
/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.12.12 - script4.sql

私はmysqlからこれらのファイルを自動的にインポートしようとしています。私は次のことを試しました。

mysql myDataBase < $(./myStript.sh)

ただし、エラーメッセージが表示されますambiguous redirection

だから私は次のことを試しました。

cat $(./myScript.sh) | mysql myDataBase

しかし、私のファイル名パスに含まれるスペースがブロックされ、mysqlはファイル/home/carpette/www/myFolder/scripts/sandbox/migrations/done/2017.09.28名パスにすぎないので、「既存のファイルはありません」と言います。

スペースを削除する必要があると思いますが、機能するエレガントなソリューションを見つけることができません。

更新:myScript.shを別々に維持し、他の目的に使用できるようにしたいと思います。

ベストアンサー1

./myStript.sh | while read line
do 
    mysql myDataBase < "$line"
done

スクリプトを実行し、1行ずつ出力を取得し、結果を読み取って処理できるように、mysqlへのファイルパスに渡します。スペースを考慮するには、$line変数(ファイルパス)に引用符を追加してください。

おすすめ記事