执行expect命令时,spawn_id错误

时间:2012-09-28 15:49:37

标签: ssh expect

我正在编写一个脚本,将Valgrind复制到我们在命令行输入的任何架子上。语法如下:

  

vgrindCopy [货架编号]

出于某种原因,文件将复制而没有任何问题,但在复制完成后,会观察到以下错误:

错误的spawn_id(进程早先死了?)     执行时 “期待”#“”

以下是相关代码的副本:

 function login_shelf {
    expect -c "
    set timeout 15 
    spawn $1 
    expect \"password:\"
    send \"$PW\r\"
    expect \"#\"
    sleep 1
    exit
    "
    }
# login and make the valgrind directory at /sfs/software/shelf/current
set -- /opt/swe/tools/ext/gnu/valgrind-3.7.0/i686-linux2.6/lib/valgrind/*
login_shelf "/opt/corp/projects/shelftools/bin/app rsync -Lau $* $shelf:/shelf/valgrind" 

在玩完代码之后,我发现如果删除“expect \"#\"”行,那么程序就不再复制任何文件了。奇怪的是,我在运行脚本时遇到了问题,但同事却没有。

有没有人有类似的问题并确定原因?任何帮助都将一如既往地受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

您的代码正在生成rsync并且expect \"#\"正在等待rsync输出#,它从未执行过,因此退出并expect报告错误。

删除expect \"#\"期望脚本退出时,终止rsync。

而不是expect \"#\",您应该等待rsync退出:

expect eof
wait