我正在编写一个脚本,将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 \"#\"
”行,那么程序就不再复制任何文件了。奇怪的是,我在运行脚本时遇到了问题,但同事却没有。
有没有人有类似的问题并确定原因?任何帮助都将一如既往地受到高度赞赏!
答案 0 :(得分:1)
您的代码正在生成rsync
并且expect \"#\"
正在等待rsync输出#
,它从未执行过,因此退出并expect
报告错误。
删除expect \"#\"
期望脚本退出时,终止rsync。
而不是expect \"#\"
,您应该等待rsync退出:
expect eof
wait