Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在expect环境中使用if条件检查退出代码_Linux_Bash_Expect - Fatal编程技术网

Linux 在expect环境中使用if条件检查退出代码

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

我正在尝试使用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"
}
有人能告诉我这里出了什么问题吗


谢谢。

这是一个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"