我试图用简单的方式做一些简单但没有运气的事情。 使用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 }"
有人可以告诉我这里有什么问题吗?
谢谢。
答案 0 :(得分:0)
这是一个tcl语法错误。 请参阅http://www.tcl.tk/man/tcl8.6/TclCmd/expr.htm,http://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"