У меня есть удаленный компьютер, к которому я подключаюсь через ssh в ожидаемом сценарии.Я запускаю последовательные команды или сценарии на удаленной машине, и мне нужно знать, выходят ли они с ошибкой или нет.
Проблема: Я хочу сохранить состояние выхода предыдущего процесса в переменной.
Я знаю две вещи о проблеме:
- Мы можем узнать состояние завершения предыдущего процесса, выполнив команду
echo $?
- . Я могу получить выходные данные последнего отправления, используя
$expect_out(buffer)
, вот код:
spawn ssh $TARGET_USER@$TARGET_IP
expect "yes/no" {
send "yes\r"
expect "*?assword" { send "$TARGET_PASS\r"}
} "*?assword" { send "$TARGET_PASS\r"}
expect -re {\$ $}
# Delete start
send "su - root\r"
expect {
"Password: " {send "$TARGET_PASS\r"}
}
# Delete end
send "sh /home/$TARGET_USER/xxx.sh\r"
expect -re {\$ $}
send "echo \$\?\r"; # '\r' used here to type 'return' .i.e new line
expect -re {\$ $}
set output $expect_out(buffer);
puts "------> $output <-------\n"
#logout from root
send "exit\r"
#logout from user
send "exit\r"
expect eof
Когда я выполняю приведенный выше код, он выводит:
------> su - root
Password: <-------
Если я удаляю фрагмент кода, который я упомянул в приведенном выше коде (т. Е. Больше не root), вывод будет похож наи это именно то, что я хочу:
------> echo $?
0 <-------
Итак, как мне добиться вывода последней команды, выданной root через $expect_out(buffer)
в данном конкретном случае?