사실 멍청한 짓을 막고 있는데... 끝이 안 나네요.
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
스크립트를 실행하고 한 줄씩 출력을 가져오고 결과를 읽고 처리할 수 있도록 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를 교체하세요.