无法在expect脚本中分配命令输出

时间:2016-07-26 12:19:01

标签: expect

我想在expect脚本中执行以下命令。

`netstat -nr | while read line;do flag=$(echo $line | cut -d' ' -f4); if [[ $flag == "UG" ]];then gateway=$(echo $line | cut -d' ' -f2);echo $gateway;fi;done`

该脚本的目的是登录主机并获取hots的网关以使用ifcong eth0:0 <ip>创建另一个ip(eth0),然后添加一条IP路由 - {{1 }}

我尝试过以下可能性: 1)

ip route add <ip> via <gateway ip>

为此,我收到错误:遗失)     执行时 “set cmd”netstat -nr |读取行; do flag = $(echo $ line | cut -d“ 无法读取文件“-f4);如果[[$ flag ==”UG“]];那么gateway = $(echo $ line | cut -d”:没有这样的文件或目录

2)

`expect -c '
   spawn bash -c "ssh user@host"
   expect {
     // password provided
          }
   expect "*?$*"
   send "\$cmd"
expect EOF
    '`

为此我得到的错误为:`expect -c spawn bash -c "ssh user@host" expect { // password provided } expect "*?$*" send "netstat -nr | while read line;do flag=\$(echo \$line | cut -d' ' -f4); if [[ \$flag == "UG" ]];then gateway=\$(echo \$line | cut -d' ' -f2);echo \$gateway;fi;done\r" expect EOF '`

是否无法在expect脚本中执行bash命令并将out注册到变量,以便随后可以在expect脚本中使用它。

我已尝试couldn't read file " -f4); if [[ $flag == "UG" ]];then gateway=$(echo $line | cut -d": no such file or directory的方式但它根本没有注册输出。

1 个答案:

答案 0 :(得分:0)

foreach {whole gw f} [regexp -all -inline {\S+\s+(\S+)\s+\S+\s+(\S+)} [exec netstat -nr]] {
        if {$f eq "UG"} {
                puts "Gateway : $gw"
        }
}

输出

Gateway : 192.xx.xx.1