在期望环境中使用if条件检查退出代码

时间:2014-06-05 06:32:42

标签: linux bash expect

我试图用简单的方式做一些简单但没有运气的事情。 使用ssh连接远程服务器之后,我只是尝试查看目录 通过检查命令退出代码是否存在:

/usr/bin/expect << EOF
spawn ssh -o StrictHostKeyChecking=no -o CheckHostIP=no $buildUser@$buildServer
expect "*?assword:*"
send "mdusr1\r"
expect "*?>"
send "ls $buildPath\r"
expect "*?>"
if { $? -eq 0 } {
send_user "Done"
}

此代码失败,并显示以下错误:

ls: /d: No such file or directory
xxx@yyy> missing operand at _@_
in expression " 0 -_@_eq 0 "
    (parsing expression " 0 -eq 0 ")
    invoked from within
"if { 0 -eq 0 }"

有人可以告诉我这里有什么问题吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

这是一个tcl语法错误。 请参阅http://www.tcl.tk/man/tcl8.6/TclCmd/expr.htmhttp://wiki.tcl.tk/1042,当然还有http://linux.die.net/man/1/expect

编辑: 现在我有了期待的机器。这是一个实际工作的脚本:

#!/usr/bin/expect
spawn /bin/bash
expect "$ "
send "ls file/you/are/looking/for\r"
expect "$ "
send "echo $?\r"
expect "\n"
expect -re "\[0-9]"
set re $expect_out(buffer)
if {$re eq 0} {
    send_user "\nfound\n"
} else {
    send_user "\nnot found\n"
}

答案 1 :(得分:0)

看到你产生了一个shell,你可以让shell处理它:

send "[ -f \"$buildPath\" ] && echo found || echo not found\r"