如何在sh脚本中传出spawn的返回值
时间: 2024-03-27 18:35:00 浏览: 78
可以使用`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`命令输出该变量的值。
相关问题
在shell脚本中spawn
在Shell脚本中使用spawn,通常是为了使用expect工具来自动化交互式命令行界面。spawn是expect的关键字,用于启动一个新的进程并与之交互。
以下是使用spawn在Shell脚本中自动化交互式命令行界面的基本步骤:
1. 在Shell脚本中添加以下行:
```
#!/usr/bin/expect -f
```
这行代码告诉操作系统这个脚本需要使用expect解释器来运行。
2. 使用spawn命令启动一个新的进程,并指定要执行的命令,例如:
```
spawn ssh user@remote_host
```
这个命令会启动一个SSH会话,并登录到远程主机上。
3. 使用expect命令等待关键字出现,并执行相应的操作,例如:
```
expect "password: "
send "your_password\r"
```
这个命令会等待远程主机提示输入密码的关键字出现,然后发送密码。
4. 使用send命令发送命令或数据到远程主机,例如:
```
send "ls -l\r"
```
这个命令会在远程主机上执行ls -l命令。
5. 使用expect命令等待预期的输出,例如:
```
expect "$ "
```
这个命令会等待远程主机的命令行提示符出现。
6. 使用send命令发送退出命令,例如:
```
send "exit\r"
```
这个命令会在远程主机上执行exit命令,退出SSH会话。
7. 在Shell脚本中添加其他必要的操作,例如处理命令输出或错误信息。
完整的脚本示例:
```
#!/usr/bin/expect -f
# 启动SSH会话
spawn ssh user@remote_host
# 等待远程主机提示输入密码
expect "password: "
# 发送密码
send "your_password\r"
# 等待远程主机的命令行提示符
expect "$ "
# 在远程主机上执行命令
send "ls -l\r"
# 等待命令输出
expect "$ "
# 发送退出命令
send "exit\r"
# 等待SSH会话结束
expect eof
```
请注意,spawn和expect命令只能在expect解释器中使用,不能在普通的Bash Shell中使用。因此,在使用spawn和expect时,必须将脚本文件的扩展名改为.exp,并使用expect解释器来运行脚本。
gevent.spawn 获取返回值
gevent.spawn 函数是异步调用的,不会立即获得返回值。如果需要等待协程执行完毕并返回结果,可以使用 gevent.spawn().get() 方法,该方法会阻塞当前协程,直到被调用协程执行完毕并返回结果。例如:
```python
import gevent
def my_func():
return 'Hello, world!'
# 创建并执行协程
task = gevent.spawn(my_func)
# 阻塞当前协程,等待协程执行完毕并返回结果
result = task.get()
print(result)
```
以上代码会输出 "Hello, world!",即协程执行的结果。
阅读全文