期待脚本执行状态

时间:2010-11-18 07:38:05

标签: linux ssh expect

在下面的expect脚本中,如何在expect脚本中获取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 个答案:

答案 0 :(得分:2)

if [$? -eq 0]

是一个shell构造,你在一个期望脚本中。 我认为你应该将rsync部分与ssh部分分开,并使用远程shell来评估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 $?

$?在交互式shell上可用,不仅在脚本中,您可以在命令行中使用它,这看起来是一个很好的机会!

我不太熟悉期望,但我猜想“\ $ $”正在等待shell提示,所以我盲目地复制粘贴它。