bash命令在查找匹配项时出现意外的EOF
我想创建一个bash文件,在这里我连接到一个docker容器(mysql)并运行一个查询,然后我想将结果输出到一个csv文件中。我所尝试的:bash命令在查找匹配项时出现意外的EOF,bash,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.na
#!/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 `"'
不能在单引号中包含
”
;您需要更改外部引号
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'
"
\'
不会在'.
中转义'
。但是如何转义它呢?但是如果我应用该解决方案,它就不起作用了。使用bash-c'echo“a'b\'”模拟您的命令会产生相同的错误。使用bash-c'echo“a'''''b'''''''
按照预期解决并打印a“b'
。您只运行一个命令;我认为您根本不需要bash-c
。