Ожидайте состояние выполнения скрипта - PullRequest
1 голос
/ 18 ноября 2010

В следующем ожидаемом скрипте, как получить статус выхода rsync в ожидаемом скрипте if [$? -eq 0] выдает ошибку как

         invalid command name "$?"
         while executing
         "$? -eq 0 "
         invoked from within
        "if [ $? -eq 0 ]"
       (file "./tmp544.sh" line 7)


    #!/usr/bin/expect -f

    eval spawn ssh -l root 174.54.87.12 rsync /root/project /usr/project
    expect "root@174.54.87.12's password: $"
    send "\xxxxxxx\n"
    expect "\\$ $"
    if [ $? -eq 0 ]
    then
      echo "11"
    else
      echo "22"
    fi

1 Ответ

2 голосов
/ 18 ноября 2010
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 $?

$?доступно в интерактивной оболочке, а не только в сценариях, вы можете использовать ее в командной строке, и это выглядит как хороший повод для этого!

Я не знаком с ожидаемым, но, наверное, ожидаем "\$ $ "ожидает приглашения оболочки, поэтому я вставил его вслепую.

...