开发者

Transfer environment variables with expect

I am writing an expect script and need to transfer environment variables over a telnet session (which the man page proudly touts as a feature but provides no other mention).

So something like this:

#!/usr/bin/expect -c

spawn telnet 1.2.3.4
set rpath ""

expect "#" 开发者_高级运维{ set rpath $PATH }

where $PATH is in the environment of the remote system..any ideas?


You could easily do this by spawning bash and then issue telnet to the remote system.

I presume you want to set the path variable from the local machine to the remote machine.

#!/bin/sh
# the next line restarts using tclsh \
exec expect "$0" "$@"

set prompt "~$"
set hostname "anyhost"

spawn bash 
send "echo $PATH\r"
expect {
    $prompt {
        set pathVariable $expect_out(buffer)
    }
    timeout {
        send_user "path hasn't been set - exiting\n"
        close
        exit 1
    }

}

send "telnet $hostname\r"
expect {
       "Login:" {}
       "telnet: " {
           send_error "$argv0 couldn't login to $hostname\n"
           exit 1;
       }
       timeout {
           send_error "$argv0 couldn't login to $hostname, timeout of $timeout passed\n"
           exit 1;
       }
    }    
send "$username\r"
expect "Password:"
send "$password\r"

expect $remotePrompt
send "bash\r"
send "export PATH=$pathVariable\r"

# continue with whatever you want.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜