1

我发现了许多类似的列名未知的问题,但没有一个报告与此相同,我迷路了:

第 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 运行,然后通过电子邮件发送并删除该文件。

非常感谢任何帮助。

谢谢

4

2 回答 2

2

删除| mysql $paramsecho 语句的部分,你会有一个令人讨厌的惊喜 ;-)

问题是它s3=" SELECT *"被注入到echo语句中*并被 shell 解释为通配符。就像你在控制台中输入这个一样:

echo *

尝试双引号echo参数(您将不再需要转义单引号):

echo "$s1$HEADS$s2$s3$s4$s5$s6'$FPATH$DATE$FNAME$'$s7$s8$selectend"
于 2013-01-17T15:54:56.960 回答
0

尝试使用

mysql -u #### -p#### -e $s1$HEADS$s2$s3$s4$s5$s6\'$FPATH$DATE$FNAME$\'$s7$s8$ chit
于 2013-01-17T15:46:30.263 回答