首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果bash脚本在本例中遇到空间,它为什么会中断呢?

如果bash脚本在本例中遇到空间,它为什么会中断呢?
EN

Stack Overflow用户
提问于 2016-12-01 10:51:57
回答 2查看 56关注 0票数 3

我需要在多个服务器上执行以下命令:

代码语言:javascript
复制
mysql -h 127.0.0.1 -uroot -psecret mydatabase -e 'SELECT 1;'

所以,我有一个test1.sh脚本,它是一个动态字符串:

代码语言:javascript
复制
#!/bin/bash
echo -n "mysql -h 127.0.0.1 -uroot -psecret mydatabase -e 'SELECT 1'"

和执行给定字符串的test2.sh脚本:

代码语言:javascript
复制
#!/bin/bash
CMD=`./test1.sh`
$CMD

如果我执行`./test2.sh,我将看到帮助输出,命令将不被执行。

如果我删除mysql查询SELECT 1或整个-e参数中的空格,然后执行./test2.sh脚本,则一切都正常。

为什么会发生这种事?你能描述一下这种魔法吗?

我的bash版本是4.2.46。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-01 11:45:58

只要您控制并信任来自test1.sh,的命令行,您就可以在test2.sh中使用可怕的eval,如下所示:

代码语言:javascript
复制
#!/bin/bash
cmd="$(./test1.sh)"
eval "$cmd"

Why and when should eval use be avoided in shell scripts?

票数 2
EN

Stack Overflow用户

发布于 2016-12-01 11:21:04

您能试一下test1.sh脚本吗?

代码语言:javascript
复制
#!/bin/bash
echo -e "mysql -h 127.0.0.1 -uroot -psecret mydatabase -e"

test2.sh

代码语言:javascript
复制
#!/bin/bash
CMD=$(./test1.sh)
${CMD} "SELECT 1"
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40908706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档