#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
С этим намного проще работать!