我尝试使用ssh remote login和expect。它可以工作,但是有些输出不是预期的,我不知道为什么。这是我的shell脚本:
#!/bin/sh
expect -c ' spawn ssh USER@ADDRESS ;
expect "?assword:" ;
send "MyPassword\r" ;
expect "?" ;
send "logout\r" ;
interact'
这是我的MacOS终端的输出:
ip87-114:Downloads tasiyuchien$ ./test.sh
spawn ssh USER@ADDRESS
Password:
logout
Last login: Tue Sep 13 18:17:21 2022 from ADDRESS
xdn42o221:~ USER$ logout
Connection to ADDRESS closed.
ip87-114:Downloads tasiyuchien$
第一个问题是为什么在“Password:“后面有一个“logout”输出?问号不是代表任何单个字符吗?是否有任何隐式输出或模式我没有看到,因为我在“Password:“后面什么也看不到。(同样奇怪的是,当我将“?”替换为“*"时,“Password:“后面什么也不会输出,自动注销也失败了。)当我登录时,可以问同样的问题,因为我也只看到“logout”输出。
第二个问题是为什么输出了两个“logout”,我认为只有添加了“except continue”才能重用except参数。
谁能给我解释一下发生了什么事。谢谢!
1条答案
按热度按时间zrfyljdw1#
作为登录过程的一部分,在“密码:提示符后,输入密码并按Enter键,然后登录过程会打印一个换行符。该换行符是与“?"匹配的字符。
将“?”更改为“*”效果更好:星号可能更贪婪。2它不是只匹配一个字符,而是匹配一个或多个字符,所以它会尽可能多地收集。
为什么会出现两个“logout“?我不知道。也许你的shell在显示提示后重新打印了用户输入。