我有以下脚本:
#!/usr/bin/expect
set timeRegex "pengbumm"
expect {
default { puts "nicht gefunden" }
-re $timeRegex { puts "gefunden" }
}
如果我这样执行,我会收到错误:
martin:/tmp$ echo "pengibumm" |./bla.exp
error writing "stdout": bad file number while executing
"puts "nicht gefunden" "
invoked from within
"expect {
default { puts "nicht gefunden" }
-re $timeRegex { puts "gefunden" }
}"
(file "./bla.exp" line 4)
martin:/tmp$ echo "pengbumm" |./bla.exp
gefunden
martin:/tmp$
为什么一个人投入工作而另一个人没有工作?我该如何解决这个问题?
我猜它与所有正在消耗的输入有关,但肯定不应该停止工作。
答案 0 :(得分:2)
expect
在这种情况下从stdout
获得EOF
后,似乎stdin
关闭{/ p>}
$ echo | expect -c 'expect eof { puts eof }'
error writing "stdout": bad file number
while executing
"puts eof "
invoked from within
"expect eof { puts eof }"
$
不确定这是否是一个错误,但如果没有expect
进程,通常不会使用spawn
。
刚刚找到了解决方法。您可以puts
到stderr
代替stdout
:
$ echo | expect -c 'expect eof { puts stderr eof }'
eof
$
答案 1 :(得分:0)
似乎expect
假定通道输入/输出对不能是单向的,因此expect_user
在收到stdin的EOF后关闭stdin和stdout。尽管这对于大多数spawn
ed命令来说是有意义的,但对于当前脚本的stdin / stdout而言却没有意义。
除了pynexj的变通方法(使用puts stderr
进行输出,因为stderr在stdin上收到EOF时expect_user
并没有关闭它),看起来您可以使用Tcl gets
或使用read
命令而不是expect_user
解决此问题:
set input [read stdin]
if [regexp {pengbumm} $input] then {
puts "nicht gefunden"
} else {
puts "gefunden"
}