expect 脚本使用$?
时间: 2023-11-29 21:03:37 浏览: 52
在 expect 脚本中,$? 是一个特殊变量,它用于获取上一个命令的退出状态码。在 shell 脚本中,$? 用于获取上一个命令的退出状态码,而在 expect 脚本中,$? 用于获取最后一个 spawn 命令的退出状态码。因为 expect 脚本中的大部分命令都是通过 spawn 启动的子进程,所以 $? 变量通常用于检查子进程的退出状态码,以判断子进程是否成功执行了所需的任务。例如:
spawn ssh user@host
expect "password:"
send "mypassword\r"
expect eof
if {$? == 0} {
puts "Success"
} else {
puts "Failed"
}
在上面的示例中,$? 用于检查 ssh 命令的退出状态码,如果该命令成功执行,则 $? 的值为 0,向控制台输出 "Success",否则输出 "Failed"。
相关问题
expect 能使用$?吗
可以。在 expect 脚本中,使用 $spawn_id 来表示上一个 spawn 命令的进程 ID。因此,$spawn_id 的 exitstatus 属性就等同于 $? 的值。例如:
```
spawn ls /path/to/file
expect eof
puts "Exit status: $spawn_id exitstatus"
```
上述代码会执行 ls 命令,并输出其退出状态。其中,$spawn_id exitstatus 等同于 $?。
shell脚本expect指令返回值获取
在expect脚本中,可以使用`$?`来获取上一条指令的返回值。比如:
```
#!/usr/bin/expect
spawn ssh user@192.168.1.100
expect "password:"
send "mypassword\r"
expect "$ "
send "ls -l /tmp\r"
expect "$ "
set result $?
puts "The return value is $result"
```
在上面的脚本中,`$?`获取了`ls -l /tmp`命令的返回值,并将其赋给变量`result`。然后使用`puts`命令将返回值输出到屏幕上。注意,`$?`的值是一个整数,通常情况下,0表示成功,非零值表示失败。