我需要在多个服务器上执行以下命令:
mysql -h 127.0.0.1 -uroot -psecret mydatabase -e 'SELECT 1;'
所以,我有 test1.sh
脚本,它 echo-es 动态字符串:
#!/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。
最佳答案
只要您控制并信任来自 test1.sh
的命令行,您就可以在 test2 中使用可怕的
像这样:eval
。 sh
#!/bin/bash
cmd="$(./test1.sh)"
eval "$cmd"
关于linux - 如果在此示例中遇到空格,为什么 bash 脚本会中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908706/