我创建了一个shell脚本,其中包含一个期望脚本,用于从远程位置获取文件。一切正常,直到发送了一些命令。无论是“ ls”,“ pwd”还是任何其他命令,期望脚本都会突然结束。你们能帮我这个忙吗?
注意:安全不是问题,因此不使用公共密钥。
#!/bin/ksh
FTPREMOTEPATH=/Inbox
FTPREMOTEFILENAME=test.CSV
/usr/bin/expect -f - <<EOFEXPECT1
set timeout 60
spawn sftp -oPort=1002 [email protected]
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 [email protected]
Enter password for username
Password:
sftp> cd /Inbox
sftp> $
好的,显然我想不到EOF(EOFEXPECT1)之前的“ sftp>” {发送“ bye \ n”}。
但是,我仍然想知道在期望脚本中再见的重要性。
这是更新的工作代码:
#!/bin/ksh
FTPREMOTEPATH=/Inbox
FTPREMOTEFILENAME=test.CSV
/usr/bin/expect -f - <<EOFEXPECT1
set timeout 60
spawn sftp -oPort=1002 [email protected]
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";
expect "sftp>" {send "bye\n"}
EOFEXPECT1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句