Linux 在expect环境中使用if条件检查退出代码
我正在尝试使用expect做一些简单的事情,但没有运气。 在使用ssh连接远程服务器之后,我只想看看是否有一个目录 是否存在,请检查命令退出代码:Linux 在expect环境中使用if条件检查退出代码,linux,bash,expect,Linux,Bash,Expect,我正在尝试使用expect做一些简单的事情,但没有运气。 在使用ssh连接远程服务器之后,我只想看看是否有一个目录 是否存在,请检查命令退出代码: /usr/bin/expect << EOF spawn ssh -o StrictHostKeyChecking=no -o CheckHostIP=no $buildUser@$buildServer expect "*?assword:*" send "mdusr1\r" expect "*?>" send "ls $buil
/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"
}
有人能告诉我这里出了什么问题吗
谢谢。这是一个tcl语法错误。 当然,你也看到了 编辑: 现在我可以用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"
}
鉴于您已生成一个shell,您可以让shell处理它:
send "[ -f \"$buildPath\" ] && echo found || echo not found\r"
外壳变量在expect中不可用,它获取的只是输出。您需要发送一个打印
$?
值的命令,然后读取它。抱歉,但仍然失败,出现错误:错误#args:在执行“if{0 eq 0}”时,“0 eq 0”参数后面没有脚本您没有删除尾随的“{”,是吗?在}
和之间必须有一个空格{
--Tcl是面向单词的,空格很重要。答案更新。
send "[ -f \"$buildPath\" ] && echo found || echo not found\r"