2011-05-04 184 views
2

当在bash脚本执行回声是这样的:错误执行命令

(echo mysql --host=${host} --user=${user} --password=${password} ${database} '<' '${i// /\\ }') 

我得到了“正确的”线路返回终端......但是当我中的回声,我得到的MySQL错误。问题是我无法准确地看到发送给mysql的内容,但它看起来与我在执行回显时看到的有所不同......任何想法?

谢谢。

回答

2

如果这是一个bash脚本,然后第一线更改为

#!/bin/bash -x 

这将执行在调试模式下运行脚本,让你看到所有的变量的扩张。

输入重定向'<'不应该在引号中,也不应该是输入源。即使没有引号,我也不认为输入源会扩展到你想要的。

尝试在使用mysql命令之前创建输入源字符串。

declare input=${i// /\\ } 

使用eval

eval mysql --host=${host} --user=${user} --password=${password} ${database} < ${input} 

EVAL将尝试执行命令之前展开所有变量。

2

我想你应该在尝试执行命令时删除围绕<${i// /\\ }的单引号。执行时,你必须将它们视为适当的令牌,而不仅仅是字符串。