我需要在多个服务器上执行以下命令:
mysql -h 127.0.0.1 -uroot -psecret mydatabase -e 'SELECT 1;'所以,我有一个test1.sh脚本,它是一个动态字符串:
#!/bin/bash
echo -n "mysql -h 127.0.0.1 -uroot -psecret mydatabase -e 'SELECT 1'"和执行给定字符串的test2.sh脚本:
#!/bin/bash
CMD=`./test1.sh`
$CMD如果我执行`./test2.sh,我将看到帮助输出,命令将不被执行。
如果我删除mysql查询SELECT 1或整个-e参数中的空格,然后执行./test2.sh脚本,则一切都正常。
为什么会发生这种事?你能描述一下这种魔法吗?
我的bash版本是4.2.46。
发布于 2016-12-01 11:45:58
只要您控制并信任来自test1.sh,的命令行,您就可以在test2.sh中使用可怕的eval,如下所示:
#!/bin/bash
cmd="$(./test1.sh)"
eval "$cmd"发布于 2016-12-01 11:21:04
您能试一下test1.sh脚本吗?
#!/bin/bash
echo -e "mysql -h 127.0.0.1 -uroot -psecret mydatabase -e"test2.sh
#!/bin/bash
CMD=$(./test1.sh)
${CMD} "SELECT 1"https://stackoverflow.com/questions/40908706
复制相似问题