为了账号安全,请及时绑定邮箱和手机立即绑定

如何执行存储为带引号和星号的字符串的bash命令

如何执行存储为带引号和星号的字符串的bash命令

翻过高山走不出你 2019-08-01 16:06:25
如何执行存储为带引号和星号的字符串的bash命令我尝试执行以下命令:mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig"我把它存储在一个字符串中:cmd="mysql AMORE -u username -ppassword -h localhost -e\"SELECT  host  FROM amoreconfig\""测试一下:echo $cmd mysql AMORE -u username -ppassword -h localhost -e"SELECT host FROM amoreconfig"尝试执行:$cmd我得到了mysql的帮助页面:mysql  Ver 14.14 Distrib 5.1.31, for pc-linux-gnu (i686) using readline 5.1Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.This software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL licenseUsage: mysql [OPTIONS] [database](...)我想我正在做一些关于引号的错误但却无法找出问题所在。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

使用数组,而不是字符串,如BashFAQ#50中的指导。

使用字符串是非常糟糕的安全实践:考虑password用户提供的(或查询中的where子句或任何其他组件)的情况; 你不想要eval密码包含$(rm -rf .)


只运行一个本地命令

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig" )"${cmd[@]}"

毫不含糊地打印命令

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig" )printf 'Proposing to run: 'printf '%q ' "${cmd[@]}"printf '\n'

通过SSH运行命令(方法1:使用Stdin)

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig" )printf -v cmd_str '%q ' "${cmd[@]}"ssh other_host 'bash -s' <<<"$cmd_str"

通过SSH运行命令(方法2:命令行)

cmd=( mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig" )printf -v cmd_str '%q ' "${cmd[@]}"ssh other_host "bash -c $cmd_str"


查看完整回答
反对 回复 2019-08-01
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

试试这个

$ cmd='mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"'
$ eval $cmd


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 827 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信