Linux 期望脚本+;如果未显示字符串,如何忽略字符串

Linux 期望脚本+;如果未显示字符串,如何忽略字符串,linux,bash,shell,expect,tk,Linux,Bash,Shell,Expect,Tk,我编写了以下expect脚本,以便将ssh自动登录到远程Linux机器 并运行命令“cat/etc/APP_VERSION.txt file” 有时我没有从ssh命令中询问- "Are you sure you want to continue connecting (yes/no)?" 因此,在本例中,第一个expect仍然等待字符串“(yes/no)?”——:( 而不是继续第二个期望——“密码:” 如何解决这个问题 我的意思是如果这句话“你确定要继续连接吗(是/否)?” 不是从ss

我编写了以下expect脚本,以便将ssh自动登录到远程Linux机器 并运行命令“cat/etc/APP_VERSION.txt file”

有时我没有从ssh命令中询问-

    "Are you sure you want to continue connecting (yes/no)?"
因此,在本例中,第一个expect仍然等待字符串“(yes/no)?”——:(

而不是继续第二个期望——“密码:”

如何解决这个问题

我的意思是如果这句话“你确定要继续连接吗(是/否)?” 不是从ssh中显示的

然后我们必须转到下一个预期的“password:”,但是如何做到这一点呢

备注1-如果出现问题“是否确实要继续连接(是/否)”,则expect脚本可以正常工作,没有任何问题

remark2-我不能使用timeout正值(作为timeout 10),因为ssh本身有延迟

。 . .

我的expect脚本:(此expect是我的ksh脚本的一部分)

。 . . .

来自我的linux机器的ssh示例

  ssh APP_MACHINE
  The authenticity of host 'APP_MACHINE (172.12.6.190 )' can't be established.
  RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b.
  Are you sure you want to continue connecting (yes/no)?
设置一个超时

设置超时10

将等待预期的行10秒,如果未在指定的超时内收到,则继续执行脚本中的下一行

参考文献

更新: 如果超时不是一个可接受的解决方案,您可以尝试使用一系列替代响应来推动脚本前进

expect {
 "(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue }
 password:                                                {send PASS123\r; exp_continue}
}

您可能希望使用Python的pexpect模块来实现这一点,因为它可以为您提供类似于case的东西:)


有关更多详细信息,请参阅:

生成SSH时执行以下操作:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip"

很抱歉,我不能使用它,因为ssh有时本身有时间连接——有时是5秒或10秒,谁知道呢对我来说,这不是一个好的解决方案。再次抱歉,这一定是另一个解决方案!!!无论如何,这不是一个好主意,因为我的应用程序需要在expect脚本中快速运行,没有任何延迟。我添加exp_continue字符串,正如您在此处显示的那样,但它仍然被卡住。请注意,这两个字符串位于同一expect{…}中,而不是与原始脚本中的两个单独的expect中。-1表示超时建议,但是+2对于
exp\u continue
(您不希望在“密码”块中使用)thx felix sun,但我更愿意首先在expect中解决它,因为我的shell脚本中有allot expect脚本,所以我不想花分配的时间将其翻译到pylon,但您的想法对新的scratch cod很有好处
spawn ssh -o "StrictHostKeyChecking no" "$user\@ip"