猿问

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

如何执行存储为带引号和星号的字符串的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](...)

我想我正在做一些关于引号的错误但却无法找出问题所在。


翻过高山走不出你
浏览 828回答 3
3回答

Cats萌萌

使用数组,而不是字符串,如BashFAQ#50中的指导。使用字符串是非常糟糕的安全实践:考虑password用户提供的(或查询中的where子句或任何其他组件)的情况;&nbsp;你不想要eval密码包含$(rm -rf .)!只运行一个本地命令cmd=(&nbsp;mysql&nbsp;AMORE&nbsp;-u&nbsp;username&nbsp;-ppassword&nbsp;-h&nbsp;localhost&nbsp;-e&nbsp;"SELECT&nbsp;&nbsp;host&nbsp;&nbsp;FROM&nbsp;amoreconfig"&nbsp;)"${cmd[@]}"毫不含糊地打印命令cmd=(&nbsp;mysql&nbsp;AMORE&nbsp;-u&nbsp;username&nbsp;-ppassword&nbsp;-h&nbsp;localhost&nbsp;-e&nbsp;"SELECT&nbsp;&nbsp;host&nbsp;&nbsp;FROM&nbsp;amoreconfig"&nbsp;)printf&nbsp;'Proposing&nbsp;to&nbsp;run:&nbsp;'printf&nbsp;'%q&nbsp;'&nbsp;"${cmd[@]}"printf&nbsp;'\n'通过SSH运行命令(方法1:使用Stdin)cmd=(&nbsp;mysql&nbsp;AMORE&nbsp;-u&nbsp;username&nbsp;-ppassword&nbsp;-h&nbsp;localhost&nbsp;-e&nbsp;"SELECT&nbsp;&nbsp;host&nbsp;&nbsp;FROM&nbsp;amoreconfig"&nbsp;)printf&nbsp;-v&nbsp;cmd_str&nbsp;'%q&nbsp;'&nbsp;"${cmd[@]}"ssh&nbsp;other_host&nbsp;'bash&nbsp;-s'&nbsp;<<<"$cmd_str"通过SSH运行命令(方法2:命令行)cmd=(&nbsp;mysql&nbsp;AMORE&nbsp;-u&nbsp;username&nbsp;-ppassword&nbsp;-h&nbsp;localhost&nbsp;-e&nbsp;"SELECT&nbsp;&nbsp;host&nbsp;&nbsp;FROM&nbsp;amoreconfig"&nbsp;)printf&nbsp;-v&nbsp;cmd_str&nbsp;'%q&nbsp;'&nbsp;"${cmd[@]}"ssh&nbsp;other_host&nbsp;"bash&nbsp;-c&nbsp;$cmd_str"

缥缈止盈

试试这个$&nbsp;cmd='mysql&nbsp;AMORE&nbsp;-u&nbsp;root&nbsp;--password="password"&nbsp;-h&nbsp;localhost&nbsp;-e&nbsp;"select&nbsp;host&nbsp;from&nbsp;amoreconfig"' $&nbsp;eval&nbsp;$cmd
随时随地看视频慕课网APP
我要回答