
実は愚かなことを防いでいるのに…終わりが出ないですね。
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変数(ファイルパス)に引用符を追加してください。
答え2
それはまるで
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/*" \ -exec msqlclient MyDatabase -u $USER -h $HOST -p < "{}" \;
必要に応じて$ USERと$ HOSTを交換してください。