Linux Expect SFTP + put文件

时间:2013-01-04 16:23:19

标签: linux upload sftp expect put

我通过期望 SFTP 连接期间自动输入密码时获得了一些帮助。

然后我尝试发出put命令,事情又变得复杂了。我正在使用以下代码:

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

expect -c "
spawn sftp remoteuser@*.*.*.*
expect \"remoteuser@*.*.*.*'s password:\"
send \"passwrd\r\"
interact "

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

我的密码输入和与远程服务器的连接工作正常,但我很难在SFTP提示符下显示和执行 put output / data.xml 命令。

我的 echo“把output / data.xml \ r” echo“退出\ r \ n”行打印成文字,这并不奇怪,但我真的不喜欢我不知道还有什么可行。

1 个答案:

答案 0 :(得分:2)

我知道你需要一些帮助,但你至少应该尝试一些阅读。当您说expect -c 'some stuff ...'时,您指定整个 expect脚本作为-c选项的参数。之后的会话将不存在。

另外,尝试了解interact命令的作用,而不是盲目地应用有人建议的内容。

无论如何,解决方案:

expect  <<'END_EXPECT'
set timeout -1
spawn sftp remoteuser@1.2.3.4
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

请注意,第一次看到here-doc分隔符时会引用它。这样,您将不会受到任何shell扩展。这就像整个here-doc是单引号。