【发布时间】:2020-07-01 12:46:45
【问题描述】:
我创建了一个 shell 脚本,其中包含一个用于从远程位置获取文件的期望脚本。一切正常,直到发送一些命令。无论是 'ls' 或 'pwd' 还是任何其他命令,expect 脚本都会突然结束。你能帮我解决这个问题吗?
注意:安全不是问题,因此不使用公钥。
#!/bin/ksh
FTPREMOTEPATH=/Inbox
FTPREMOTEFILENAME=test.CSV
/usr/bin/expect -f - <<EOFEXPECT1
set timeout 60
spawn sftp -oPort=1002 username@test.server.com
expect {
default { exit 1}
-re "failed|invalid password|Permission denied" {exit 2}
"Connection closed" {exit 1}
timeout {exit 1}
}
expect "Password:"
send "password\r"
expect {
default {exit 1}
-re "password|Enter password for " {puts "Incorrect Password"; exit 2}
"sftp>" {send "cd $FTPREMOTEPATH \r"}
}
expect "sftp>"
send "pwd\r"
send "get $FTPREMOTEFILENAME \r";
EOFEXPECT1
在上面的脚本中,脚本在发送 cd $FTPREMOTEPATH 后突然结束。
下面是输出:
$ ./test.sh
spawn sftp -oPort=1002 username@test.server.com
Enter password for username
Password:
sftp> cd /Inbox
sftp> $
【问题讨论】:
-
如果你想看到更多的输出,你需要添加更多的
expect行。通常一个脚本只是发送...期望...发送...期望。最后使用expect eof等待连接关闭(如果您发送了应该关闭连接的命令)。 -
看看sexpect (Expect for Shells),您可以使用它来编写仅使用shell代码的Expect脚本。
标签: linux shell ftp sftp expect