2010-11-18 7 views
1

Skriptausführung Status Erwartet Skript erwarten, wie im Skript if [$? -eq 0] wirft alsIm Folgenden

  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 

Antwort

2
if [$? -eq 0] 

eine Schalenkonstruktion einen Fehler erwarten, dass den Exit-Status von rsync zu erhalten ist, und Sie sind in einem Skript erwarten. Ich glaube, Sie sollten den rsync Teil vom ssh Teil trennen, und verwenden Sie die Remote-Shell-rsync-Status zu bewerten:

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 $? 

$? ist in der interaktiven Shell verfügbar, nicht nur in Skripten, Sie können es in der Befehlszeile verwenden, und es sieht nach einer guten Gelegenheit aus, dies zu tun!

Ich bin nicht vertraut mit zu erwarten, aber ich denke, erwartet "\ $ $" wartet auf die Shell-Eingabeaufforderung, also kopiere ich blind eingefügt.

+0

erwarten {\ $ $} ist eine wohl eher idiomatische Alternative zu erwarten "\\ $ $" –