【问题标题】:expect into remote system, get output to local shell variable期望进入远程系统,将输出输出到本地 shell 变量
【发布时间】:2013-05-22 22:26:02
【问题描述】:

我正在尝试让一个期望脚本通过 ssh 进入远程系统,并获取远程命令的输出。 我希望在本地提供该输出。 例如,ssh 进入系统并获取本地时间输出:

#!/usr/bin/expect --
set timeout 60
spawn ssh user@server.domain.com
expect {
timeout {puts "timed out after $timeout seconds"; exit}
"Password:"
}
send "SuperSecretPassword\r"
expect "user$ "
send "date\r"
expect "date"
expect "\r"
set buffer1 '$expect_out(buffer)'
expect "\r"
set buffer2 '$expect_out(buffer)'
send "exit\r"
expect eof
set buffer3 '$expect_out(buffer)'
exit
export VARIABLE $buffer1
export VARIABLE $buffer2
export VARIABLE $buffer3
echo "Okay, we are done expecting..."
echo "Buffer1: $buffer1"
echo "Buffer2: $buffer2"
echo "Buffer3: $buffer3"

上面的当然不行,实际上脚本执行在expect“exit”之后就结束了

【问题讨论】:

    标签: variables expect


    【解决方案1】:
    #!/usr/bin/expect --
    log_user 0
    set timeout 60
    spawn ssh user@server.domain.com
    expect {
    timeout {puts "timed out after $timeout seconds"; exit}
    "Password:"
    }
    send "mypassword\r"
    expect "user$ "
    send "date\r"
    expect "date\r\n"
    expect "*\r" { send_user "$expect_out(0,string)\n" }
    close
    exit
    

    【讨论】:

      【解决方案2】:

      将数据从子进程(expect 脚本)传递到父进程(shell 脚本?)的方式是通过 stdio 通道:expect 脚本必须打印 expect_out 缓冲区,而 shell 脚本必须捕获 expect 输出并以某种方式对其采取行动。

      exit 之前,做类似的事情

      puts "buffer1='$buffer1'"
      puts "buffer2='$buffer2'"
      puts "buffer3='$buffer3'"
      

      您可能希望关闭所有其他期望输出。那是log_user 0 和...其他一些我记不起的东西...Exploring Expect 这本书包含所有精彩的细节。

      shell 脚本会做

      expect_out=$(./program.exp)
      while read line; do
          [[ $line == buffer[123]=* ]] && eval "$line"
      done <<< "$expect_out"
      

      或者干脆

      source <(./program.exp)
      

      当然,expect 本身就是一种成熟且功能强大的语言 (Tcl),毫无疑问,它可以完成您需要做的所有本地工作,而无需费心调用期望和传回数据的 shell 脚本.

      【讨论】:

        猜你喜欢
        • 2015-10-30
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 2018-01-27
        • 2019-05-14
        • 1970-01-01
        相关资源
        最近更新 更多