我尝试了各种事情,但没有任何作用,例如
#!/usr/bin/expect
log_user 0
spawn bash
send "echo 1\r"
log_user 1
expect "1"
log_user 0
send "exit\r"
expect eof
输出中的gives:
echo1
而我只需要“ 1”。我希望有人知道简单的解决方案如何修复我的示例
接管从发送命令的输出有点痛苦。 there是一种不依赖log_user设置的更普遍的情况,它以正则表达式捕获输出:
我只是想到我:如果命令不需要任何互动,则期望过度杀伤:只需使用
exec
set output [exec bash -c {echo $RANDOM}]
ok,它看起来以下脚本确实(至少与我需要的):
log_user 0
spawn bash
expect "#" {} "\\\$" {}
send -- "echo AA\r"
expect -- "echo AA\r" {}
log_user 1
expect -- "AA"
log_user 0
send -- "exit\r"
expect eof
expect -re "\n(.*?)>$"
than比建议的:
从
Https://stackoverflow.com/a/45216514/895245提供完整脚本:
#!/usr/bin/expect -f
log_user 0
spawn bash
send "PS1='>'\r"
expect -re {>$}
send "printf 'ab\\ncd\\n'\r"
expect -re "\n(.*?)>$"
puts -nonewline $expect_out(1,string)
send "exit\r"
expect eof
完全输出:
ab
cd
是所需的,这是我的测试命令在bash中的预期输出:
printf 'ab\ncd\n'
该测试命令还证明了多行输出正常工作。
测试期望为5.45.4,bash 5.2.32,ubuntu24.10