我发现了许多与未知列名称类似的问题,但没有一个报告与此相同,我迷路了:
第 1 行的错误 1054 (42S22):“字段列表”中的未知列“tad.sh”
'tad.sh' 是 bash 脚本本身的名称。
代码:
#!/bin/sh
FPATH="/home/bermans/CHIT/"
DATE="$(date +"%d-%m-%Y")"
FNAME="transfer-authority.csv"
HEADS="\"Time\", \"Urgent\", \"Initials\", \"Transfer from\", \"From description\", \"Transfer to\", \"To description\", \"Sum\", \"In respect of\""
params="-u #### -p#### chit"
s1="SELECT "
s2=" UNION"
s3=" SELECT *"
s4=" FROM \`transfer-authority\`"
s5=" WHERE Time > DATE_SUB( NOW( ) , INTERVAL 24 HOUR )"
s6=" INTO OUTFILE "
s7=" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"'"
s8=" LINES TERMINATED BY '\n'"
selectend=";"
echo $s1$HEADS$s2$s3$s4$s5$s6\'$FPATH$DATE$FNAME$\'$s7$s8$selectend | mysql $params
我希望每天为过去 24 小时内的条目创建一个带有标题的 CSV 文件。我打算将其作为 cronjob 运行,然后通过电子邮件发送并删除该文件。
非常感谢任何帮助。
谢谢
最佳答案
删除| mysql $params
echo 语句的一部分,你会大吃一惊;-)
问题是 s3="SELECT *"
被注入(inject)到 echo
语句中并且 *
被 shell 解释为通配符。这与您在控制台中键入此内容相同:
echo *
尝试对 echo
参数加双引号(您将不再需要转义单引号):
echo "$s1$HEADS$s2$s3$s4$s5$s6'$FPATH$DATE$FNAME$'$s7$s8$selectend"
关于mysql - Bash mysql 查询 : ERROR 1054 (42S22) 'file name' in 'field list' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382543/