bash命令寻找匹配项时出现意外的EOF

时间:2018-09-26 10:33:18

标签: bash

我想创建一个bash文件,在该文件中我连接到docker容器(mysql)并运行查询,然后将结果输出到csv文件中。我尝试过的:

 #!/bin/bash

 docker-compose exec db /bin/bash -c 'mysql -u user -ppassword dbname 
 -e "SELECT c.id, c.first_name, c.last_name, 
 c.email, cp.id, cp.name, company.id, company.name FROM 
 db.candidate c LEFT JOIN db.candidate_position cp ON 
 cp.id = c.candidate_position_id LEFT JOIN db.company company 
 ON company.id = c.company_id INTO OUTFILE \'Result.csv\'"'

错误是我得到:

 line 3: unexpected EOF while looking for matching `"'

1 个答案:

答案 0 :(得分:1)

您不能在单引号中包含';您需要更改外部引号。

docker-compose exec db /bin/bash -c "mysql -u user -ppassword dbname 
 -e \"SELECT c.id, c.first_name, c.last_name, 
 c.email, cp.id, cp.name, company.id, company.name FROM 
 db.candidate c LEFT JOIN db.candidate_position cp ON 
 cp.id = c.candidate_position_id LEFT JOIN db.company company 
 ON company.id = c.company_id INTO OUTFILE 'Result.csv'\""

但是,由于仅运行单个命令,因此不需要bash -c;只需直接运行mysql

docker-compose exec db mysql -u user -ppassword dbname \
   -e "SELECT c.id,
              c.first_name,
              c.last_name, 
              c.email,
              cp.id,
              cp.name,
              company.id,
              company.name
       FROM
         db.candidate c
         LEFT JOIN db.candidate_position cp
            ON cp.id = c.candidate_position_id
         LEFT JOIN db.company company
            ON company.id = c.company_id
       INTO OUTFILE 'Result.csv'
      "