在bash脚本上执行echo时,如下所示:
(echo mysql --host=${host} --user=${user} --password=${password} ${database} '<' '${i// /\\ }' )
我得到了回传给终端的“正确”行...但是当我删除回声时,我得到MySQL错误。问题是我无法确切地看到发送给mysql的确切内容,但它似乎与我在回声中看到的不同...有什么想法吗?
谢谢。
答案 0 :(得分:2)
我猜你应该在尝试执行命令时删除<
和${i// /\\ }
周围的单引号。执行时,您必须将它们视为适当的标记,而不仅仅是字符串。
答案 1 :(得分:2)
如果这是在bash脚本中,则将第一行更改为
#!/bin/bash -x
这将以调试模式执行脚本,并允许您查看所有变量的扩展。
输入重定向&#39;&lt;&#39;不应该在引号中,输入源也不应该。即使没有引号,我也不认为输入源会扩展到您想要的状态。
尝试在mysql命令中使用之前创建输入源字符串。
declare input=${i// /\\ }
使用eval
eval mysql --host=${host} --user=${user} --password=${password} ${database} < ${input}
eval将在尝试执行命令之前扩展所有变量。