预测仅输出该命令,而没有其他内容

问题描述 投票:0回答:3
如何编写期望脚本执行命令并仅打印命令的输出?

我尝试了各种事情,但没有任何作用,例如

#!/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设置的更普遍的情况,它以正则表达式捕获输出:

stdout expect
3个回答
4
投票

我只是想到我:如果命令不需要任何互动,则期望过度杀伤:只需使用

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

0
投票
我不确定为什么,但是我需要

expect -re "\n(.*?)>$"
than比建议的:

0
投票

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
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.