我想在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
的方式但它根本没有注册输出。
答案 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