Я пытаюсь перехватить вывод команды "dir", войдя в коммутатор, но я не могу этого сделать. Я использую ожидание в Баш. Я использую wait_out для захвата вывода этой команды в буфер и распечатать его. На самом деле я хочу захватить вывод и выполнить некоторые операции над ним.
SCript:
#!/bin/bash
expect -c "
spawn telnet 1.1.1.1 2000
sleep 1
send \"\r\"
send \"\r\"
expect {
Prompt> { send \"dir\r\" }
}
set output $expect_out(buffer)
"
echo "$output"
Выход:
spawn telnet 1.1.1.1 2000
Trying 1.1.1.1...
Connected to 1.1.1.1 (1.1.1.1).
Escape character is '^]'.
Prompt>
Prompt>
После отображения этих подсказок сценарии просто завершаются. Пожалуйста, помогите.
EDIT:
Теперь я разделил его, чтобы использовать подстановку параметров и одинарные кавычки. Теперь я сталкиваюсь с другой ошибкой.
Сценарий:
expect -c "
spawn telnet $IP $PORT1
sleep 1
send \"\r\"
send \"\r\"
"
expect -c '
expect {
Prompt> { send \"dir\r\" }
set output $expect_out(buffer)
puts "$output"
}
'
Выход:
spawn telnet 172.23.149.139 2033
can't read "expect_out(buffer)": no such variable
while executing
"expect {
Prompt> { send \"dir\r\" }
set output $expect_out(buffer)
puts "$output"
}
"
РЕДАКТИРОВАТЬ 2:
Привет Крис / все,
Я изменил его в соответствии с вашими предложениями. Но я все еще сталкиваюсь с ошибками.
Сценарий:
output=$(expect -c '
spawn telnet '"$IP $PORT1"'
sleep 1
send '"\r"'
send '"\r"'
expect Prompt> { send '"dir\r"' }
expect '"\n"'
expect -indices Prompt>
puts '"[string range $expect_out(buffer) 0 [expr $expect_out(0,end) - 1]]"'
')
echo "======="
echo "$output"
echo "======="
Вывод:
syntax error in expression "(0,end) - 1"
while executing
"expr (0,end) - 1"
invoked from within
"string range (buffer) 0 [expr (0,end) - 1]"
invoked from within
"puts [string range (buffer) 0 [expr (0,end) - 1]]"
=======
spawn telnet 1.1.1.1 2000
Trying 1.1.1.1...
Connected to 1.1.1.1 (1.1.1.1).
Escape character is '^]'.
Prompt>
Prompt>
=======
Следовательно, чтобы обойти ошибку, я изменил строку
puts '"[string range $expect_out(buffer) 0 [expr $expect_out(0,end) - 1]]"'
до
puts '"$expect_out(buffer)"'
Но тогда я не получаю ошибки, но вывод dir также не печатается. Что-то вроде:
Prompt>
Prompt> (buffer)