理由を教えてください
spawn scp $FILE1 $FILE2 $LOGIN@$IP:/tmp
私の予想されるスクリプトでは、FILE2ではなくFILE1のみをコピーしますか?
scpを介して2つのファイルを転送しようとしています。
scp file1.csv file2.crt 192.8.200.1:/tmp
驚いたことに、正常に/ tmpに移動しました。
それでは、VIAはなぜコピーされたファイルだけがコピーされると予想しますか?ファイル1??
私の文法に問題があるのでしょうか?
私の予想されるスクリプトの例:
#!/usr/bin/expect -f
set FILE1 file1.csv
set FILE2 file2.crt
set multiPrompt {[#>$]}
spawn scp $FILE1 $FILE2 $LOGIN@$IP:/tmp
expect {
")?" { send "yes\r" ; exp_continue }
word: {send $PASS\r}
}
私もこれを試してみます:
spawn scp "$FILE1 $FILE2" $LOGIN@$IP:/tmp
または
spawn scp '$FILE1 $FILE2' $LOGIN@$IP:/tmp
しかし、私は同じ問題に直面しました。
答え1
expect
私はこのために次のスクリプトを書いて(私の仮想マシンで)動作します。実行例:
./scp.exp <first host user> <first host user pass> <first host name> <second host name> <second host user> <second host user pass> <directory path i.e. /tmp>
スクリプト:
#!/usr/bin/expect -f
# ./sshlogin.exp uptime
# set Variables
set user [lindex $argv 0];
set password [lindex $argv 1];
set host [lindex $argv 2];
set copy_to_host [lindex $argv 3];
set copy_to_host_user [lindex $argv 4];
set copy_to_host_pass [lindex $argv 5];
set copy_to_host_dir [lindex $argv 6];
set file1 one.txt;
set file2 two.txt;
set timeout 10
# now ssh
spawn ssh $user@$host -o StrictHostKeyChecking=no
match_max 100000 # Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
expect "*$ "
send -- "scp -o StrictHostKeyChecking=no $file1 $file2 $copy_to_host_user@$copy_to_host:$copy_to_host_dir\r"
expect "*?assword:*"
send -- "$copy_to_host_pass\r"
expect "*$ "
send -- "exit\r"
expect eof
expect
注:大容量ファイルを処理する場合は、待ち時間を追加する必要があります。