2013-01-04 47 views
1

我剛剛在SFTP連接期間通過使用期望在自動輸入密碼時獲得了一些幫助。Linux Expect SFTP + put文件

然後我試着發佈put命令,事情又變得複雜了。我使用下面的代碼:

#!/usr/bin/expect 
#!/bin/sh 

expect -c " 
spawn sftp [email protected]*.*.*.* 
expect \"[email protected]*.*.*.*'s password:\" 
send \"passwrd\r\" 
interact " 

echo "put output/data.xml\r" 
echo "quit\r" 

我的密碼輸入連接到遠程服務器工作得很好,但我在努力獲得放輸出/ data.xml中命令來顯示,並在執行SFTP提示。

回聲「把輸出/ data.xml中\ R」回聲「退出\ R」線只是打印文本這並不完全令人驚訝,但我真的不知道是什麼,否則可能會奏效。

我需要幫助,請

+0

相關問題:http://stackoverflow.com/questions/14159935/why-does-automating-sftp-with-expect-hang-after-sending-the-password –

回答

2

我知道你需要一些幫助,但你至少應該嘗試做一些閱讀。當您說expect -c 'some stuff ...'時,您將指定整個期望腳本作爲-c選項的參數。之後,Expect會話將不存在。

此外,嘗試瞭解interact命令的作用,而不是盲目應用某人建議的內容。

總之,解決方法:

expect <<'END_EXPECT' 
set timeout -1 
spawn sftp [email protected] 
expect "[Pp]assword:" 
send "passwrd\r" 
expect "whatever the sftp prompt looks like" 
send "put output/data.xml\r" 
expect "whatever the sftp prompt looks like" 
send "quit\r" 
expect eof 
END_EXPECT 

注意,當你第一次看到它在這裏-doc的分隔符是引用。這樣,你將不會受到任何shell擴展。這就像整個文件都是單引號。

+0

那麼,缺乏學習將帶走'成功'。 –

+0

我不得不刪除'-c'選項,否則這個工程很棒! – Josh