如何在重定向期间运行bash命令 << EOF

18 浏览
0 Comments

如何在重定向期间运行bash命令 << EOF

我知道在重定向过程中可以运行bash命令,但我不知道具体的操作方法。

我想要做类似于这样的事情:

#!/bin/bash

mysql -uUser -pPasswd << EOF

echo '我想通过使用由bash运行的echo来打印一些内容'

use Mydb

这里是一些SQL命令

commit;

EOF

我曾经因为错误地在"<< EOF"中使用了双引号而成功实现了这个功能,但现在无法做到。

0
0 Comments

在使用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") )

在这方面,您可以以更灵活的方式构造脚本。

这非常有用,下次我会尝试一下。非常感谢!

0
0 Comments

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命令。

0