如何在重定向期间运行bash命令 << EOF
在使用bash与MySQL交互时,除了可以使用heredoc,还可以直接调用mysql本身以批处理模式运行。这在查询较短且不需要在heredoc主体中调用系统时非常有用。bash中的一般形式如下:
$(mysql -uuser -hhost database.table -Bse "any valid mysql command")
(如果查询中有指定表,则可以省略.table
)为了处理mysql返回的信息,通常建议将信息返回到一个数组中:
results=( $(mysql -uuser -hhost database.table -Bse "any valid mysql command") )
在这方面,您可以以更灵活的方式构造脚本。
这非常有用,下次我会尝试一下。非常感谢!
system
命令是在mysql
命令行客户端中使用的。在上述代码中,通过在mysql
命令行客户端中使用system
命令来运行bash命令。
然而,有一个问题是:为什么要在mysql
命令行客户端中运行bash命令?这可能是因为在某些情况下,需要在执行mysql命令的同时,还需要执行一些bash命令。
解决这个问题的方法是使用<< EOF来重定向输入,然后在EOF之间编写bash命令。这样,当mysql命令行客户端执行到<< EOF时,它将读取EOF之后的所有内容,并将其作为输入传递给mysql命令行客户端。通过这种方式,可以在执行mysql命令的同时执行bash命令。
以下是解决问题的代码:
#!/bin/bash mysql -uUser -pPasswd << EOF system echo 'I wanna echo something by using echo which is run by bash'; use Mydb some sql commands here commit; EOF
以上就是问题的原因和解决方法。通过在mysql命令行客户端中使用<< EOF来重定向输入,可以在执行mysql命令的同时执行bash命令。