次のコマンドを実行していますが、参照などに関するエラーが発生します。
#!/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変数の周囲には二重引用符が1つしかありません。
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