【发布时间】:2019-12-05 10:16:09
【问题描述】:
我正在尝试通过 bash 脚本在远程服务器上运行查询。问题是,我必须在已经有单引号的查询中使用单引号。
我的代码:
# note: $line has ` in it, as this is a SQL query
ssh server "mysql --defaults-extra-file=$SQL_CREDS_FILE $R_DB $t -e '$line INTO OUTFILE \"\'\"$DIR/$tbl_count.csv\"\'\" FIELDS TERMINATED BY \"\'\",\"\'\" ENCLOSED BY \"\'\"\"\'\" LINES TERMINATED BY \"\'\"\n\"\'\"'"
我在运行此代码时看到的错误:
bash: -c: line 0: unexpected EOF while looking for matching `"'
bash: -c: line 1: syntax error: unexpected end of file
MYSQL 查询示例:
mysql -u user -pPassword database -e 'select `id`,`title`,`name`,`description`,`icon`,`creation_date` as `created_at`,`mutation_date` as `created_at` from achievement;'
【问题讨论】:
-
$line中的 ` 字符是否被转义?我认为它可能会解决问题。 -
@vicraj 用
\`尝试过,但不幸的是没有运气。 -
命令周围的
$(...)是错误的,除非您特别希望ssh命令返回一个应该在本地评估的命令(这反过来看起来是一个非常危险的结构;但实际上,我不敢相信这就是你想要的)。 -
我试图发布一个答案,但很难猜出你期望最终执行什么命令。您能否请edit您的问题显示应该执行的确切命令,以及您希望所有这些变量设置为的内容。
-
你能在不转义的情况下发布代码吗? 有效的东西。前任。 mysql 命令有效但不是在单行中执行,而是通过键入 ssh 会话来执行。或者
INTO OUTFILE在 mysql 会话中键入时起作用的部分。
标签: bash quotes double-quotes single-quotes