необходимо вернуть код выхода созданных процессов из ожидаемого скрипта

#shell #tcl #expect

#оболочка #tcl #ожидать

Вопрос:

У меня ниже ожидаемый скрипт

 expect -c "
spawn tdwallet add $StringName
expect "^Enter"
send "Krishna123r"
"

if [ $? != 0 ]; then
   echo "Failed to Add a String $StringName."
else
   echo ""add <string>" ==> [OK]"
fi
  

Я попытался изменить ожидаемый скрипт, т.е. добавил несколько строк после «отправить»

 expect -c "
spawn tdwallet add $StringName
expect "^Enter"
send "Krishna123r"
expect eof
catch wait reason
exit [lindex $reason 3]
"
  

Но он всегда возвращает ненулевое значение, независимо от сбоя / успеха процесса.

Не могли бы вы дать мне несколько советов по определению правильного кода выхода всякий раз, когда процесс завершается неудачно.

Заранее спасибо

с уважением,
Шри Кришна Эрра.

Ответ №1:

Проблема в том, что $reason заменяется вашей оболочкой (и не ожидается). Более того, он, вероятно, заменяется пустой строкой, что приводит к синтаксической ошибке. Самый быстрый способ исправить это — поставить обратную косую черту перед $ , вот так:

 expect -c "
spawn tdwallet add $StringName
expect "^Enter"
send "Krishna123r"
expect eof
catch wait reason
exit [lindex $reason 3]
"
  

OTOH, вероятно, было бы лучше сейчас, когда вы достигаете этого уровня сложности, поместить этот скрипт в отдельный файл, чтобы вы могли уменьшить количество обратных косых черт. На этом этапе вы переключаетесь на передачу объекта для добавления в качестве аргумента командной строки.

Таким образом, в addWallet.exp у вас есть это:

 spawn tdwallet add [lindex $argv 0]
expect "^Enter"
send "Krishna123r"
expect eof
catch wait reason
exit [lindex $reason 3]
  

И тогда ваш основной сценарий — это:

 expect addWallet.exp $StringName
  

С этим намного проще работать!