1

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

vgrindCopy [货架号]

出于某种原因,文件将毫无问题地复制过来,但是在复制完成后会观察到以下错误:

错误的 spawn_id (进程提前死亡?)在执行“expect”#”时

以下是相关代码的副本:

 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 \"#\"”行,那么程序就不会再复制任何文件了。奇怪的是,我在运行脚本时看到了问题,但同事却没有。

有没有人遇到过类似的问题并确定原因?任何帮助将一如既往地不胜感激!

4

1 回答 1

1

您的代码正在生成rsyncand 在expect \"#\"等待 rsync 输出 a #,但它永远不会这样做,因此它退出并expect报告错误。

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

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

expect eof
wait
于 2012-09-28T15:56:33.240 回答