expect spawn scp * shell路徑名展開
阿新 • • 發佈:2018-12-14
一直通過 scp 同步多臺伺服器上配置檔案,雖然已經寫了 shell 指令碼,但是密碼還需要手動輸入,終於忍不了啦,經查可以使用 expect 改變這種現狀(當然不只這一種解決方案)
#!/usr/bin/expect
#filename scp.exp
spawn scp -r files/* [email protected]:/home/panshiqu
expect "password:"
send "123456\n"
expect eof
panshiqudeiMac:exp panshiqu$ ./scp.exp
spawn scp -r files/* [email protected] :/home/panshiqu
[email protected]'s password:
files/*: No such file or directory
這個錯誤困擾我很長時間,根本原因是 路徑名展開 是 shell 的特性,expect 沒有
雖然網上有提供 一次僅拷貝一個檔案 的替代方案
#!/usr/bin/expect
#filename scp2.exp
spawn scp -r [lindex $argv 0] [email protected]:/home/panshiqu
expect "password:"
send "123456\n"
expect eof
#!/bin/bash #filename scp.sh for f in `echo files/*` do ./scp2.exp $f done
即便這只是一個輔助工具,而且我也不關心效率,但我也不想如此,一個檔案一次呼叫,建立連線等等,會慢的
反覆嘗試,終不得解,最後靈機一動,分享給大家
#!/bin/bash
#filename scp2.sh
scp -r $1 $2
#!/usr/bin/expect
#filename scp3.exp
spawn ./scp2.sh files/* [email protected]:/home/panshiqu
expect "password:"
send "123456\n"
expect eof