如何执行存储为带引号和星号的字符串的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"
缥缈止盈
TA贡献2041条经验 获得超4个赞
试试这个
$ cmd='mysql AMORE -u root --password="password" -h localhost -e "select host from amoreconfig"' $ eval $cmd
- 3 回答
- 0 关注
- 827 浏览
添加回答
举报
0/150
提交
取消