Linux .bash_profile ldapsearch函数未输出到终端

Linux .bash_profile ldapsearch函数未输出到终端,linux,bash,function,output,.bash-profile,Linux,Bash,Function,Output,.bash Profile,我的.bash_配置文件中有一个bash函数,它不会将结果返回给终端。 当我通过CLI正常运行命令时,将返回结果 ldap_check_cleaup () { ldapsearch -LLL -h itdsvbms.SomeDomain.org -p 389 \ -D "uid=SomeUser,o=SomeDomain.org" -w SomePassWord -b "ou=People,o=SomeDomain.org" \ -s sub '(&(Reserved

我的.bash_配置文件中有一个bash函数,它不会将结果返回给终端。 当我通过CLI正常运行命令时,将返回结果

ldap_check_cleaup () 
{
ldapsearch -LLL -h itdsvbms.SomeDomain.org -p 389 \
    -D "uid=SomeUser,o=SomeDomain.org" -w SomePassWord -b "ou=People,o=SomeDomain.org"  \
    -s sub '(&(ReservedRMAliases=$1)(!(RMid=*))(RMAliasUpdateDate=12/01/2012 19:02:00)(RMAliasStatus=IN)(status=IN))' |  \
        tee /dev/tty  
} 
从bash提示符执行时,运行ldap\u check\u clenaup TestRecord不会返回任何输出。TestRecord确实存在,当从CLI运行以下命令时,将返回正确的记录:

ldapsearch -LLL -h itdsvbms.SomeDomain.org -p 389 -D "uid=SomeUser,o=SomeDomain.org" \
    -w SomePassWord -b "ou=People,o=SomeDomain.org" \
    -s sub '(&(ReservedRMAliases=TestRecord)(!(RMid=***))(RMAliasUpdateDate=12/01/2012 19:02:00)(RMAliasStatus=IN)(status=IN))' | \
        tee /dev/tty`
只有当我尝试将此ldapsearch和参数用作bash函数时,才会出现输出不足的情况


我认为这可能与属性(!(RMid=*)使用“而不是”有关但是我不确定,请帮助。

您需要在包含
$1
的参数周围使用双引号。变量插值不会在单引号字符串内执行。

通过管道将输出传输到
tee/dev/tty
,您试图实现什么?如果我删除tee/dev/tty,同样缺少输出。我试图强制执行通过tty重定向到终端(我已经自由地格式化了代码,还添加了一些bash换行符以提高可读性。希望我没有弄糟任何事情。)你有一个有趣的尼克…现场!用in.bash_配置文件中的替换了'。这很奇怪,因为在CLI中,当我发出带有“I get”-bash:!”的命令时:未找到事件“返回进行ldapsearch查询。是什么导致了cli与bash函数的行为差异?我刚刚读了您引用的文章。在本例中,如何在CLI中处理双引号中的*呢?我尽量保持我的函数与CLI使用的函数尽可能相似。你不需要做任何特殊的事情。当一个
*
在双引号内时,将不会执行文件名globbing,并且
*
将被传递给程序(我认为这是本例中所需的结果)。