shell如何使用spawn的返回值
时间: 2023-08-29 13:08:38 浏览: 195
在使用spawn命令后,可以使用expect命令来等待子进程的输出。expect命令可以根据子进程输出的内容来进行不同的操作,例如发送指定的命令或者退出子进程等。
如果在spawn命令中指定了变量,那么spawn命令会返回这个变量的值。可以使用set命令将这个值保存到一个变量中,然后在后续的操作中使用这个变量。
例如:
```
#!/usr/bin/expect
set timeout 10
set host "127.0.0.1"
set user "root"
set password "123456"
spawn ssh $user@$host
expect {
"yes/no" {
send "yes\r"
exp_continue
}
"password:" {
send "$password\r"
set result $expect_out(buffer)
}
timeout {
puts "timeout"
exit 1
}
eof {
puts "eof"
exit 1
}
}
puts "login success"
puts "result=$result"
```
在这个脚本中,使用spawn命令连接到远程主机,并根据子进程输出的内容发送不同的命令。在输入密码后,将expect_out(buffer)的值保存到result变量中,并在后续的操作中使用。
相关问题
expect返回值给shell_如何获得expect中spawn进程的返回值
在expect脚本中,可以使用`wait`命令等待spawn的进程退出,并获取其返回值。`wait`命令的返回值为spawn进程的退出状态码,可以通过`$?`变量获取。例如:
```
spawn mycommand
expect {
"Password:" {
send "mypassword\r"
exp_continue
}
eof
}
wait
set exit_code $?
puts "The exit code of mycommand is $exit_code"
```
在以上例子中,`wait`命令等待spawn的进程退出,并获取其退出状态码,赋值给`$exit_code`变量。最后通过`puts`命令输出该变量的值。
如何在sh脚本中传出spawn的返回值
可以使用`exit`命令在expect脚本中退出,并将spawn进程的返回值传递给外层的shell脚本。例如:
expect脚本代码:
```
spawn mycommand
expect {
"Password:" {
send "mypassword\r"
exp_continue
}
eof
}
set exit_code [wait]
exit $exit_code
```
在以上例子中,使用`wait`命令获取spawn进程的退出状态码,并将其赋值给`$exit_code`变量。最后使用`exit`命令退出expect脚本,并将`$exit_code`作为参数传递给外层的shell脚本。
外层的shell脚本可以通过`$?`变量获取expect脚本的退出状态码,即spawn进程的返回值。例如:
外层的shell脚本代码:
```
#!/bin/sh
./expect_script.sh
exit_code=$?
echo "The exit code of mycommand is $exit_code"
```
在以上例子中,调用expect脚本`expect_script.sh`并获取其退出状态码,赋值给`$exit_code`变量。最后通过`echo`命令输出该变量的值。
阅读全文