if [$? -eq 0]
- это конструкция оболочки, и вы находитесь в сценарии ожидаемого.Я думаю, вам следует отделить часть rsync от части ssh и использовать удаленную оболочку для оценки состояния rsync:
eval spawn ssh -l root 174.54.87.12
expect "root@174.54.87.12's password: $"
send "\xxxxxxx\n"
expect "\\$ $"
send "rsync /root/project /usr/project"
expect "\\$ $"
send "echo $?"
# Examine the output of $?
$?доступно в интерактивной оболочке, а не только в сценариях, вы можете использовать ее в командной строке, и это выглядит как хороший повод для этого!
Я не знаком с ожидаемым, но, наверное, ожидаем "\$ $ "ожидает приглашения оболочки, поэтому я вставил его вслепую.