Bash 使用read-s时禁用预期回显密码

Bash 使用read-s时禁用预期回显密码,bash,tcl,expect,Bash,Tcl,Expect,我有一个bash脚本,它使用read-s请求密码。通过expect运行脚本会将密码回显到终端。奇怪的是,它能按预期工作,可能是五分之一,但大多数情况下不能。有没有可靠的方法来禁用此功能 Bash脚本 期望脚本 我想要什么 我通常得到的 明白了!解决办法是睡眠1毫秒 #!/usr/bin/expect -f spawn -noecho ~/tmp/login_test expect "login name? " {send "gordon\r"} expect "password? " {slee

我有一个bash脚本,它使用read-s请求密码。通过expect运行脚本会将密码回显到终端。奇怪的是,它能按预期工作,可能是五分之一,但大多数情况下不能。有没有可靠的方法来禁用此功能

Bash脚本 期望脚本 我想要什么 我通常得到的
明白了!解决办法是睡眠1毫秒

#!/usr/bin/expect -f
spawn -noecho ~/tmp/login_test
expect "login name? " {send "gordon\r"}
expect "password? " {sleep .001; send "gr33d\r"}
expect "favorite color? " {send "green\r"}
expect eof {exit}

这很奇怪;当我尝试它时,它对我的效果完全符合你的要求。我更新了我的问题-它似乎在大约15%的时间里都像预期的那样有效。我认为部分问题在于send是一个异步命令。
#!/usr/bin/expect -f
spawn -noecho ~/tmp/login_test
expect "login name? " {send "gordon\r"}
expect "password? " {
  #stty -echo     -- This doesn't work
  #log_user 0     -- This doesn't work either
  send "gr33d\r"
  #log_user 1
  #stty echo
}
expect "favorite color? " {send "green\r"}
expect eof {exit}
> ~/tmp/login_test
login name? gordon
password? 
favorite color? green
gordon
gr33d
green
> ~/tmp/expect_test
login name? gordon
password? gr33d

favorite color? green
gordon
gr33d
green
#!/usr/bin/expect -f
spawn -noecho ~/tmp/login_test
expect "login name? " {send "gordon\r"}
expect "password? " {sleep .001; send "gr33d\r"}
expect "favorite color? " {send "green\r"}
expect eof {exit}