我需要在多台服务器上执行以下命令:
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
param中的空格,然后执行./test2.sh
脚本,一切正常。
为什么会这样?你能描述一下这个魔法吗?
我的bash版本是4.2.46。
答案 0 :(得分:2)
只要您控制并信任来自test1.sh
的命令行,就可以在eval
中使用可怕的test2.sh
,如下所示:
#!/bin/bash
cmd="$(./test1.sh)"
eval "$cmd"
答案 1 :(得分:-2)
您可以像这样尝试 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"