2010-11-18 3 views
1

Dans le script expect suivant comment obtenir le statut de sortie de rsync dans le script expect if [$? -eq 0] renvoie une erreur commeAttendez-vous à l'état d'exécution du script

  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 

Répondre

2
if [$? -eq 0] 

est une construction de la coque, et que vous êtes dans un attendre un script. Je pense que vous devez séparer la partie rsync de la partie ssh, et utiliser le shell distant pour évaluer l'état 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 $? 

$? est disponible sur shell interactif, non seulement dans les scripts, vous pouvez l'utiliser sur la ligne de commande, et cela ressemble à une bonne occasion de le faire!

Je ne suis pas familier avec attendre, mais je suppose que "\ $ $" attend l'invite du shell, donc je l'ai copié aveuglément.

+0

attendez {\ $ $} est une alternative sans doute plus idiomatique que d'attendre "\\ $ $" –