我正在尝试在我的LDAP基础上进行搜索:
ldapsearch -x -h localhost -p 389 -D uid=xxxadmin,ou=administrators,ou=topologymanagement,o=netscaperoot -v -w 12345 -b "ou=Usuarios,ou=Alunos,ou=XXXX,o=xxXXXxx" -f (!(objectClass=ntUser)) 1.1
基本上我想列出没有objectClass ntUser的所有条目,并将objectClass添加到它们。
我将此作为答案:
-bash: !: event not found
答案 0 :(得分:2)
来自http://www.openldap.org/lists/openldap-software/200104/msg00196.html
此消息来自shell(bash)。它说明了命令 `&#39!;没有找到你无意中要求的事件。有时候是这样的 因为bash中的双引号不会阻止某些命令 调用。改为使用单引号:
您的搜索应该是这样的:
ldapsearch -x -h localhost -p 389 -D 'uid=xxxadmin,ou=administrators,ou=topologymanagement,o=netscaperoot' -v -w 12345 -b 'ou=Usuarios,ou=Alunos,ou=XXXX,o=xxXXXxx' -f '(!(objectClass=ntUser))' 1.1
答案 1 :(得分:0)
您的搜索应该有效。但是,对于bash,您需要引用参数。
类似的东西:
ldapsearch -x -h localhost -p 389 -D uid=xxxadmin,ou=administrators,ou=topologymanagement,o=netscaperoot -v -w 12345 -b "ou=Usuarios,ou=Alunos,ou=XXXX,o=xxXXXxx" -f "(!(objectClass=ntUser))" 1.1
测试了openLDAP
@(#) $OpenLDAP: ldapsearch (Ubuntu) (Mar 17 2014 21:19:27) $buildd@aatxe:/build/buildd/openldap-2.4.31/debian/build/clients/tools
(LDAP library: OpenLDAP 20431)
ldapsearch -x -h localhost -p 389 -D "cn=admin" -W -b "dc=example,dc=com" -s sub -a always -z 1000 "(!(objectClass=inetOrgPerson))" "objectClass"
和OpenDJ
ldapsearch --version
OpenDJ 2.7.0-20140727
Build 20140727000040Z
ldapsearch -h localhost -p 389 -D "cn=admin" -b "dc=example,dc=com" -s sub -a always -z 1000 "(!(objectClass=inetOrgPerson))" "objectClass"
-Jim
答案 2 :(得分:0)
它的发生是因为bash认为!作为一个特殊的角色
“!”开始历史记录替换,除非后跟空格,制表符,行尾,'='或'('
最后,您应该能够通过在术语周围加上单引号来解决您的问题,如下所示:
ldapsearch -x -h localhost -p 389 -D uid=xxxadmin,ou=administrators,ou=topologymanagement,o=netscaperoot -v -w 12345 -b "ou=Usuarios,ou=Alunos,ou=XXXX,o=xxXXXxx" -f '(!(objectClass=ntUser))' 1.1
请参阅stackoverflow上的以下问题。
Which characters need to be escaped in Bash? How do we know it?