2013-03-13 53 views
0

我有以下shell腳本從Unix機器在同一網絡中複製一個txt文件到Windows機器:從Unix機器txt文件複製到Windows機器

#!/bin/sh 
HOST='localhost' 
USER='redacted' 
PASSWD='redacted' 
FILE='/los_prod/scripts/log.txt' 

ftp $HOST <<END_SCRIPT 
user $USER 
$PASSWD 
put $FILE 
quit 
END_SCRIPT 
exit 0 

它給錯誤爲:

:連接失敗。

我在腳本中給出了所有正確的信息。可能是什麼原因?

+0

此Perl腳本的一部分可能會幫助您,因爲您在登錄時遇到問題:http://theunixshell.blogspot.com/2012/12/ftp-using-perl-and-getting-files-based.html – Vijay 2013-03-13 07:15:16

回答

0

ftp不接受來自stdin的輸入,因此您不能僅以這種方式提供登錄信息。您需要使用像expect這樣的程序來自動執行正常的ftp命令行客戶端。更好的選擇可能是使用其他語言而不是Bourne shell腳本。像Perl(如@sarathi所提到的),Ruby或Python之類的東西可以讓你編寫一個相當小的腳本,並使用可用的FTP庫來更容易地編寫腳本。

下面是一個expect腳本的版本:

set host "localhost" 
set user "redacted" 
set pass "redacted" 
set file "/los_prod/scripts/log.txt" 

spawn ftp $host 
expect "Name" 
send "$user\n" 
expect "Password:" 
send "$pass\n" 
expect "ftp>" 
send "put $file\n" 
expect "ftp>" 
send "quit\n" 

你可能不得不在系統上安裝expect;它不像其他口譯員那樣廣泛。任何現代Linux發行版都會有一個包。

相關問題