私は台本を書いています。SCP一部のファイルですが、ファイルの場所はユーザーまたは他のスクリプトによってパラメーターに渡される必要があります。
#!/usr/bin/expect
set FILEPATH1 $1
spawn sh "scp $FILEPATH1 $USER@$HOST:/destination/files"
set pass "pass123"
expect {
password: {send "$pass\r"; exp_continue}
}
また、ビルドする前にこれを試して、#!/usr/bin/expect
FILEPATH1=$1
答え1
これはあなたが望むことを行いません:
set FILEPATH1 $1
$1, $2, ...
Tcl(および予想)は、コマンドライン引数にアクセスするためにシェルスタイル方式を使用しません。グローバルリストを使用したいです$argv
。
set FILEPATH1 [lindex $argv 0]
また、ビルド呼び出しが正しくありません。sh
次を見つける文書名前は「scp $FILEPATH1 $USER@$HOST:/destination/files」です。 scpを生成するためにシェルは必要ありません。
spawn scp $FILEPATH1 $USER@$HOST:/destination/files
今、USERとHOSTはどこから来ましたか?環境変数ですか?もしそうなら、
spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files
また、スクリプトが終了する前に実際に転送が完了するのを待つ必要はありません。これを行う:
expect password:
send "$pass\r"
set timeout -1
expect eof
パスワードを一度だけ入力するように求められます。何度も入力する必要がある場合
expect {
password: {
send "$pass\r"
set timeout -1
exp_continue
}
eof
}