【问题标题】:How to get expect to set a bash variable如何获得期望设置一个bash变量
【发布时间】:2013-07-24 21:29:28
【问题描述】:

我希望下面的期望脚本在主 bash 脚本中设置一个变量。换句话说,我想将 $SSH_SUCCESS 设置为通过/失败字符串。我曾尝试使用 $expect_out 和 $::env(SSH_SUCCESS) 但没有成功。如何从期望中设置 bash 变量?

expect << EOF
log_user 0
log_file $TEST_LOG
set timeout 5
spawn ssh root@$RADIO_IP

.....
....expect script, echoing the return of an SSH command...

send "echo\$?\n"
expect {
  "0" {
        send_user "SSH test: PASSED\r"
        SSH_SUCCESS="PASSED"
      }
  "1" {
        send_user "SSH test: FAILED\r"
        SSH_SUCCESS="FAILED"
      }


sleep 1
send_user "\n"
exit

EOF    

  echo $SSH_SUCCESS

【问题讨论】:

  • 脚本无法在另一个进程中设置变量。脚本应输出结果,父脚本应使用$(...) 捕获它。
  • 很公平。我将如何在条件语句中准备一个“标志”,以及如何在父脚本中读取它?

标签: bash variables expect


【解决方案1】:

我不知道 Expect,但我认为是这样的

SSH_SUCCESS=$(expect <<EOF
...
expect {
  "0" {
        puts "PASSED"
      }
  "1" {
        puts "FAILED"
      }
...
EOF
)

echo $SSH_SUCCESS

【讨论】:

    【解决方案2】:

    没有办法设置变量。

    这是另一种判断 Expect 退出状态的方法。

    expect << EOF
    log_user 0
    log_file $TEST_LOG
    set timeout 5
    spawn ssh root@$RADIO_IP
    
    .....
    ....expect script, echoing the return of an SSH command...
    
    send "echo\$?\n"
    
    expect -re "\[0-9\]+$"
    #set latest command exit status to valiable "exit_code"
    set exit_status \$expect_out(0,string)
    
    if { \$exit_status == 0 } {
        send_user "SSH test: PASSED\r"
    } else {
        send_user "SSH test: FAILED\r"
    }
    
    sleep 1
    send_user "\n"
    # exit expect as latest command exit status
    exit \$exit_status
    EOF
    
    if [ $? -eq 0 ];then
        SSH_SUCCESS="PASSED"
    else
        SSH_SUCCESS="FAILED"
    fi
    echo ${SSH_SUCCESS}
    

    【讨论】:

      猜你喜欢
      • 2018-10-01
      • 2021-10-19
      • 2022-10-15
      • 2015-09-08
      • 1970-01-01
      • 2016-04-18
      • 2014-08-09
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多