1

コマンド ラインで入力した任意のシェルフに Valgrind をコピーするスクリプトを作成しています。構文は次のとおりです。

vgrindCopy [棚番号]

何らかの理由で、ファイルは問題なくコピーされますが、コピーが完了すると次のエラーが発生します。

「expect "#"」の実行中に悪い 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 \"#\"、プログラムがファイルをコピーしなくなることがわかりました。スクリプトを実行すると問題が発生するのに、同僚には問題が発生しないのも奇妙なことです。

誰かが同様の問題を抱えていて、原因を特定しましたか? いつものように、どんな助けでも大歓迎です!

4

1 に答える 1

1

あなたのコードは を生成し、rsyncrsyncexpect \"#\"が を出力するのを待って#いますが、決して出力しないため、終了しexpectてエラーを報告します。

Expect スクリプトを削除するとexpect \"#\"、rsync が終了して終了します。

代わりにexpect \"#\"、rsync が終了するのを待つ必要があります。

expect eof
wait
于 2012-09-28T15:56:33.240 に答える