1

我目前有一个看起来像这样的脚本:

sql="SELECT id FROM user 
     WHERE (email LIKE '%a@b.com' 
            OR email LIKE '%c@d.com' 
            OR email LIKE '%f@g.com' );"

read -a ids < <(ssh localhost "mysql test -e \"$sql\"")

但它没有正确执行。使用set -x时,输出如下所示:

+ read -a usu_ids
++ ssh localhost 'mysql test -e " SELECT' id FROM user WHERE '(usu_email' LIKE ''\''%a@b.com'\''' OR email LIKE ''\''%c@d.com'\''' OR email LIKE ''\''%f@g.com'\''' '); "'

它给出了一个虚假的价值。有什么建议么?

谢谢

4

2 回答 2

0

Option 1:这是一个示例,您可以对其进行调整以满足您的需求:

$ ssh user@hostname <<END
> cd temp_files
> ls -lrt
> #Run any commands on the remote host here
> END

total 4
drwxr-xr-x 2 test test 4096 May 27 14:18 cron_log

Option 2 :您可以将要在远程主机上运行的命令放在本地脚本中,并使用 ssh 运行它。下面给出一个例子:

$ cat SO.sh
cd ~/temp_files
ls -lrt | awk '{print $9}'
$
$ myVar=`ssh user@remotehost 'bash -s' < SO.sh`
$
$ echo ${myVar}
cron_log
于 2013-07-05T04:39:29.520 回答
0

我认为您应该将 mysql 数据库名称放在 mysql 命令的末尾:

read -a ids < <(ssh localhost "mysql -e \"$sql\" test")
于 2013-07-05T12:07:27.430 回答