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
これはあなたが望むことをしていません:
set FILEPATH1 $1
Tcl(および期待)は、コマンドライン引数にアクセスするためのシェルスタイルの$1, $2, ...
方法を使用しません。グローバル$argv
リストを使用したい場合:
set FILEPATH1 [lindex $argv 0]
また、スポーンコールが正しくありません。 sh
は、「scp $ FILEPATH1 $ USER @ $ Host:/ destination/files」という名前のfileを探します。 scpを起動するためにシェルは必要ありません。
spawn scp $FILEPATH1 $USER@$Host:/destination/files
さて、ユーザーとホストはどこから来たのですか?それらは環境変数ですか?その場合:
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
}