在bash中执行命令时出错

时间:2011-05-04 18:13:11

标签: mysql regex linux perl bash

在bash脚本上执行echo时,如下所示:

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

我得到了回传给终端的“正确”行...但是当我删除回声时,我得到MySQL错误。问题是我无法确切地看到发送给mysql的确切内容,但它似乎与我在回声中看到的不同...有什么想法吗?

谢谢。

2 个答案:

答案 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将在尝试执行命令之前扩展所有变量。