从expect / tcl传递多个参数到perl脚本

我在下面的脚本中遇到一些麻烦。

proc checkUser {userip} { set search "show users | include " set search_cmd [concat $search $userip] exp_send "$search_cmd\r" expect { -re "Vi.*" { set oui "uei.opennms.org/services/passiveServiceStatus" set host "localhost" set iface "--interface $userip" set service "--service Test" set parm1 "--parm 'passiveNodeLabel [getNodeName $userip]'" set parm2 "--parm 'passiveIpAddr $userip'" set parm3 "--parm 'passiveServiceName Test'" set parm4 "--parm 'passiveStatus Up'" send_user [ exec perl /opt/opennms/bin/send-event.pl $oui,$host,$iface,$service,$parm1,$parm2,$parm3,$parm4 ] #send_user [ exec [pwd]] } } } 

整个Expect脚本执行没有错误,但是被调用的perl脚本似乎并没有执行,但是当我在bash中用相同的参数运行perl脚本时,它做了它所要做的事情。

从Expect中调用perl脚本是否正确?

提前致谢。

编写的程序将把这些参数作为一个大的参数传递给Perl脚本,这些参数之间用逗号分隔。 虽然这通常是合法的,但这可能不是Perl程序需要的! 相反,在它们之间放置空格,使得这些值在Tcl级别是单独的参数,并且它们也将在Perl级别变成单独的命令行参数:

 exec perl /opt/opennms/bin/send-event.pl $oui $host $iface $service $parm1 $parm2 $parm3 $parm4 

此外,你似乎有每个Tcl变量多个参数,你正在尝试使用shell引用。 这更错了 。 编写这样的代码会更好:

 expect { -re "Vi.*" { set oui "uei.opennms.org/services/passiveServiceStatus" set host "localhost" send_user [ exec perl /opt/opennms/bin/send-event.pl $oui $host \ --interface $userip \ --service "Test" \ --parm "passiveNodeLabel [getNodeName $userip]" \ --parm "passiveIpAddr $userip" \ --parm "passiveServiceName Test" \ --parm "passiveStatus Up" ] } } 

每个参数字在Tcl中都是它自己的字; 我已经把反斜杠换成了更清晰的东西。 我们使用双引号,以便在仍然处理替换时可以嵌入空格,但是如果您需要奇怪的东西,则可以使用{大括号}或使用反斜杠。