2015-11-05 67 views
0

我有這個腳本爲了使rsync與另一臺服務器,這個propossal是爲了獲得1600個文件,這個腳本作爲兩個變量,日期和小時,所以,我發送這兩個值與shell腳本然後我傳遞值。從期望輸出不完整

Expect腳本:

#!/usr/bin/expect 

set DIR_DATE [lrange $argv 0 0] 
# Define date variable. 

set DT_HOUR [lrange $argv 1 1] 
# Define hour variable. 

spawn rsync -avzb -e ssh [email protected]:/SOURCE_DIR/$DIR_DATE/A$DIR_DATE.$DT_HOUR*.txt /TARGET_DIR/$DIR_DATE/ 
expect "password:" 
send "PASSWORD\r" 
#interact 
expect eof 

,而shell腳本是:

#!/bin/bash 

***HERE is the code to get date and hour variable: DT_DATE,DT_HOUR; then, next step is run the expect script*** 

${DIR_BIN}/rsync_expect.sh ${DT_DATE} ${DT_HOUR} 

你可以注意到,在expect腳本,我的評論 「互動」 二字,是因爲:

  1. 如果不是評論並手動運行腳本,它運行得非常好,它會得到1600個文件。
  2. 如果它是註釋,並通過shell腳本運行,它只能得到50個文件,並且關閉。

那麼,爲了獲得使用shell腳本的所有文件的任何sugestion?

+0

問題是爲什麼在沒有交互的情況下腳本早退了?這可能是期待超時。嘗試設置無限(或至少更長)的超時時間。 –

回答

1

您可能會超時:50個文件可能是您可以在10秒內傳輸(默認)的內容。您產卵前補充一點:set timeout -1

「.SH」是一個錯誤的文件擴展名的expect腳本:使用「.EXP」

lrange命令返回一個列表。使用lassign $argv DIR_DATE DT_HOUR

+0

感謝格倫,我做出了你所取得的改變,但是,當我使用「設置超時-1」時,從不開始。只有消息密碼,那麼只有提示符閃爍。 – user3658319

+0

文件正在傳輸嗎?你可能沒有看到任何東西,因爲你不會「期待」任何事情。如果你想看世界過去,最好的方法就是使用'交互式'。 –