다음 명령을 실행 중인데 참조 등과 관련된 오류가 발생합니다.
#!/bin/bash
test='my_table'
date='2020-10-31 00:00:00.000000'
mysql --user=halloween --password='ghost_123' --database='ghost_database' <<END
use ghost_datebase;
CREATE EVENT myevent ON SCHEDULE AT \"$date"\ ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM "$test";
END
그런 다음 다음 오류가 발생합니다.
ERROR at line 2: Unknown command '\"'.
답변1
큰따옴표는 END
여기에서 문서 시작 부분의 태그를 식별합니다. 그런 다음 여기에 설명된 대로 올바른 MySQL 구문을 사용하십시오. MySQL에서 정상적으로 이스케이프되지 않는 한 따옴표를 이스케이프하지 마십시오.
mysql --user='halloween' --password='ghost_123' --database='ghost_database' <<"END"
CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM "$test";
END
저는 귀하의 SQL 구문을 수정하려는 것이 아닙니다. 나, 테이블 이름(또는 문자열)에 큰따옴표가 올바른지 완전히 확신할 수 없습니다.
삽입할 변수가 없으면 here-doc 식별자를 작은따옴표로 묶는 것이 정확합니다. (참조는 문자열에 대한 참조와 동일합니다.)
답변2
인용된 문자열은 여기에 문서화됩니다.
<<END
CREATE EVENT $name ON SCHEDULE
AT Str_to_date('$date', '%Y-%m-%d %T.%f')
ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM $test;
END
MariaDB 데이터베이스에서 다음 명령을 성공적으로 실행했습니다.
export DATE='2020-10-28 14:00:00.000000'
export NAME=eventje
export TEST=test
mysql --password='xYzAbC' --database=ghp <<END
DROP EVENT $NAME;
CREATE EVENT $NAME ON SCHEDULE
AT Str_to_date('$DATE', '%Y-%m-%d %T.%f')
ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM $TEST;
END
답변3
다음 스크립트를 사용하여 솔루션을 찾을 수 있었습니다.
$date 변수 주위에는 큰따옴표가 하나만 있습니다.
date='2020-10-31 00:00:00.000000'
#CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM '$test';
mysql --user=halloween --password='ghost_123' --database='ghost_database' <<END
use ghost_database;
CREATE EVENT myevent ON SCHEDULE AT "$date" ON COMPLETION NOT PRESERVE ENABLE DO SELECT * FROM ghost_database;
END
``````````````````
This script can be run separately if needed using an input argument:
In this example below the input argument is 'ghost'. It could technically lookup whatever variables or be passed the date variable in epoch and simply convert it.
`````````````````
while getopts i: option
do
case "${option}"
in
i) ghost=${OPTARG};;
esac