2010-11-18 2 views
1

В дальнейшем ожидать сценарий, как получить статус выхода 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 "[email protected]'s password: $" 
    send "\xxxxxxx\n" 
    expect "\\$ $" 
    if [ $? -eq 0 ] 
    then 
     echo "11" 
    else 
     echo "22" 
    fi 

ответ

2
if [$? -eq 0] 

является конструкция оболочки, и вы находитесь в ожидать сценария. Я думаю, вы должны отделить RSync часть от SSH части, и использовать удаленную оболочку для оценки RSync статуса:

eval spawn ssh -l root 174.54.87.12 
expect "[email protected]'s password: $" 
send "\xxxxxxx\n" 
expect "\\$ $" 
send "rsync /root/project /usr/project" 
expect "\\$ $" 
send "echo $?" 
# Examine the output of $? 

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

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

+0

ожидать {\ $ $} - возможно более идиоматическая альтернатива ожидать "\\ $ $" –

Смежные вопросы