输出变量按"期望"

时间:2017-07-07 09:48:48

标签: shell tcl expect

我使用expect已经建立了ssh connection

我希望看到ls -1 /etc/folder/的结果。

我试过

send "files=$(ls -1 /etc/folder/)"
put $files

但失败了。

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

你遇到的问题是本地存在变量和远程系统上的变量,它们根本不是一回事。虽然是,但是可以构建使系统之间自动共享变量(似乎是)的系统,默认情况下肯定不会发生。这是一个概念性的事情,你必须正确或者除了偶然之外你不会写出正确的代码。

除此之外,您有一个较小的问题,即您没有正确发送命令,并且没有处理返回的结果。假设您知道远程系统上的提示只是一个$并且文件不是从那开始的,那么您需要这样做。

# Note the \r; it is like pressing <Return> and is important!
send "ls -1 /etc/folder \r"
# Now we collect the output:
set files {}
expect {
    "$ " {
        puts $files
    }
    -re {^[^$].*$} {
        # This grabs a line that doesn't start with $ and adds it to the list
        lappend files $expect_out(0,string)
        # Now we go back to waiting for another line or the prompt
        exp_continue
    }
}

那就是完全你是怎么做到的。是的,它需要相当多的代码...