Мне нужно автоматизировать процесс, который работает с удаленным устройством,
Вот шаги
- телнет
- введите имя пользователя
- ifconfig eth0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d '' -f 1
- запишите показанный ip и выполните остальную часть процесса с этим ip-адресом.
Известный ip - это telnet_ip, и я хочу получить IP-адрес, на который я могу подключиться по ssh.
Я хочу автоматизировать эти четыре шага в функцию с именем get_ip
, которая выводит IP-адрес. Я хотел бы использовать эту функцию следующим образом
SSH_IP=$(get_ip 127.0.0.1 1000)
Я оглянулся и вижу, что есть возможность использовать expect
. Я написал эту функцию
function get_ip(){
expect << EOF
spawn telnet $1 $2
expect -ex "Escape character is '^]'."
send "\r"
expect {
-re ".*login: " {
send "root\r"
}
}
expect -re ".*root:~# "
send "ifconfig eth0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1\r"
expect eof
send "\x1b\r"
expect "telnet>"
send "q\r"
puts "Address is $IPADDR"
EOF
}
Запустив эту функцию, я вижу IP-адрес на экране, но он не фиксируется в переменной SSH_IP
.
Мне нужна помощь в двух областях:
1. Что мне делать, чтобы SSH_IP
содержал IP-адрес.
2. Как я могу заставить expect
делать все это молча и возвращать результат?
Пожалуйста, сообщите мне, если есть какой-либо другой способ достичь той же цели.