2016-09-22 67 views
-2

我有一个使用Bash和期望的脚本程序。 该shell脚本正在执行SFTP上传。使用Bash上传SFTP

这是脚本。

#!/usr/bin/expect -f 

/usr/bin/expect << EOD 
spawn sftp [email protected] 
#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 
expect "Password:*" 
send $pwd\r 
expect "sftp> " 
send "lcd $locdirectory\r" 
expect "sftp> " 
send "cd $remDirect\r" 
expect "sftp> " 
send "put $file\r" 
expect "sftp> " 
send "bye\r" 
expect EOD 

运行此脚本时,它会在bye语句后无限循环。

它始终在终端上打印'Y'并永不结束。

请提出为什么会发生这种情况。

+0

您是否考虑过使用客户端设计,记录和支持自动化使用,如'lftp'? (是的,它支持sftp)。使用'expect'编写一个不意味着自动化的程序会使未来版本以破坏脚本的方式发生更大的风险。 –

+0

此外,这是只**使用expect,而不是bash。 –

+0

@CharlesDuffy - 'expect << EOD'是shell语法。 :) – pynexj

回答

0

如果你使用#!/usr/bin/expect那么你没有bash脚本:删除行

/usr/bin/expect << EOD 

,然后采取@ whjm的建议

而且,顺便有条件期望“继续?”是

expect { 
    "*Are you sure you want to continue connecting*" { 
     send "yes\r" 
     exp_continue 
    } 
    "Password:*" {send $pwd\r} 
} 
+0

谢谢格伦。我对脚本知识确实有限。感谢您的建议。 –

0

我能够处理这个问题。我不得不从脚本的下面注释。

#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 

我的服务器是没有目标服务器的关键,因此,而不是提示输入密码,它提示“您确定要继续连接”?并没有什么适当的通过这个。