【问题标题】:Is it possible to access an expect-spawned process from other expect scripts, called in bash是否可以从其他期望脚本访问期望生成的进程,在 bash 中调用
【发布时间】:2014-03-21 02:01:41
【问题描述】:

我有一个打开 telnet 会话并执行授权的期望脚本。执行授权后,我希望能够从 bash 调用其他期望脚本,这些脚本在同一会话中执行各种操作。

有可能吗?

【问题讨论】:

  • I want to be able to call from bash other expect scripts 表示您想调用其他希望远程登录并进行授权的bash脚本吗?
  • 我想保留授权并在其他期望脚本中执行其他操作。
  • 好的,所以在其他脚本中,您期望其他东西而不是 telnet 对,那么没关系,这是可能的。
  • 不,我想在第一个期望脚本中登录 telnet,然后在同一个 telnet 会话中使用其他脚本执行其他操作。
  • 我认为您必须让登录脚本像代理服务器一样,所有下级脚本都将连接到代理。

标签: bash session process telnet expect


【解决方案1】:

可以看下面的例子:

#!/usr/local/bin/expect

set user "user"
set host "host"
set pass "password"

spawn telnet $host

set timeout 10
expect {
    timeout {
        puts "Unable to connect to $host"
        exit 1
    }

    "login: " {
        send -- "$user\r"
        exp_continue
    }

    "assword: " {
        send -- "$pass\r"
    }
}

#Call the other expect script on host
send -- "./test.exp $user\r"
expect {
    "($user)" {
        puts "OK got it!"
    }
}

然后 test.exp 脚本应该在主机上的用户主目录中

#!/usr/local/bin/expect

set name [lindex $argv 0]

puts "Welcome ($name)"

【讨论】:

  • 这会发送一个命令来在远程主机上执行第二个期望脚本。我想在执行第一个脚本的同一台机器上执行第二个期望脚本。另外,我希望脚本与 bash 分开调用,而不需要调用另一个。
【解决方案2】:

没有完全得到你想要的,因为如果你提供一些代码或脚本然后击球,但无论如何我只有 bash 脚本,它只打开 telnet 会话,这是你想要的第一部分现在让我知道下一部分,同时通过脚本所以我可以根据需要修改我的脚本。

#!/bin/bash

testUserAction()
{
     expect<<EOF

     set timeout 200

     spawn telnet $1

     expect "login:"
     send "testuser\r"
     expect "Password"
     send "12345678\r"
      ;;;;;;;;;;;;;#rest of expect which you want

    EOF

}

testUserAction 171.172.12.1

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多