简体   繁体   English

从stdin读取数据时,如何防止`expect'在EOF退出?

[英]How can I prevent `expect` from exiting at EOF when reading data from stdin?

When I run echo "passphrase" | expect expect.exp "hostname" 当我运行echo "passphrase" | expect expect.exp "hostname" echo "passphrase" | expect expect.exp "hostname" , everything works fine, but expect exits immediately. echo "passphrase" | expect expect.exp "hostname" ,一切工作正常,但expect马上退出。

expect.exp expect.exp

#!/usr/bin/expect

set passphrase [gets stdin]

set hostname [lindex $argv 0]

spawn ssh admin@$hostname
expect "passphrase"
send "$passphrase\r"
expect "admin@$hostname"
send "clear\r"
interact

interact does not work when stdin is not a tty. stdin不是tty时, interact不起作用。 You can pass the password as a command line option, just like the hostname. 您可以像主机名一样将密码作为命令行选项传递。

You might want to use the environment to pass the passphrase: 您可能想使用环境来传递密码:

# shell code
export passphrase="pass phrase"
expect expect.exp hostname

# expect code
...
send "$env(passphrase)\r"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM