您不是从您的外壳程序而是从查询解析器中收到此错误的,而且它实际上不是由%
字符引起的,而是由'
紧接在它之前的那个字符引起的。看看你在哪里引用:
'echo "SELECT name FROM rpm_packages where name like '%jdk%';"| osqueryi --json'
^----------------------------------------------------^ ^-------------------^
shell 在解析参数时会使用这些引号。单引号告诉外壳程序忽略内部的任何其他特殊字符,并将引号内的内容视为参数的一部分——但不是引号本身。
在 shell 解析完成后,发送到的实际逐字参数pssh
如下所示:
echo "SELECT name FROM rpm_packages where name like %jdk%;"| osqueryi --json
请注意,所有单引号都已被删除。结果是您的查询工具%
在一个它不期望的地方看到了(可能是模数)运算符 - 就在另一个运算符 ( like
) 之后,这对解析器和name like * jdk
. 解析器不明白有两个连续的二元运算符意味着什么,所以它抱怨第二个:%
.
为了在那里获得文字'
,您需要跳过这个圈:
'\''
^^^^- start quoting again
|||
|\+-- literal '
|
\---- stop quoting
因此,要解决此问题,请将'
字符串中的所有实例替换为'\''
:
pssh -h myhosts -i 'echo "SELECT name FROM rpm_packages where name like '\''%jdk%'\'';"| osqueryi --json'