我无法使用 expect 脚本连接 sftp
I'm not able to connect sftp using expect script
我无法确定我在做什么wrong.Please如果我做错了请告诉我。
#!/usr/bin/bash
File_Sftp ()
{
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
STATUS=$(
expect << EOF
spawn sftp $user@$host
expect "User Name:"
send "$user\r"
expect "Password:"
send "$password\r"
expect "sftp> "
send "cd in\r"
expect "sftp> "
send "get \r"
expect "sftp> "
send "exit\r"
EOF
)
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
echo "Success";
else
echo "Unsuccessful" ;
fi
}
File_Sftp "/usr/local/bin/xxxxxx.txt"
每当我尝试执行上述 shell 脚本时,我都会遇到以下错误:
send: spawn id exp4 not open
while executing
"send "\r""
Unsuccessful
这些 bash 行不符合您的想法:
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
它们不是设置变量值,而是将位置参数 </code> 设置为给定的字符串。实际变量<strong>仍未设置</strong>。 </p>
<p><code>spawn
会尝试启动 sftp $user@$host
失败(实际上 sftp @
使用未设置的变量),expect "User Name:"
会在默认的 10 秒后超时,然后错误消息来自 send "$user\r"
(或带有未设置变量的 send "\r"
)——没有生成的进程与之交互。
如果你在测试时使用expect -d <<EOF
你可以看到这个(打开expect的详细调试输出)
你想要
user="xxxx"
password="xxxxx"
host="ftp.xxxx.xxxx.com"
或者,由于这是 bash,我们希望推广良好的编程实践(无全局变量)
local user="xxxx"
local password="xxxxx"
local host="ftp.xxxx.xxxx.com"
发送后加一个expect eof
"exit"
要查看 226
是否出现在 expect 的输出中,我会更改此
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
至
if grep -q '\<226\>' <<< "$STATUS" ; then
或
if [[ $STATUS == *226* ]]; then
我无法确定我在做什么wrong.Please如果我做错了请告诉我。
#!/usr/bin/bash
File_Sftp ()
{
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
STATUS=$(
expect << EOF
spawn sftp $user@$host
expect "User Name:"
send "$user\r"
expect "Password:"
send "$password\r"
expect "sftp> "
send "cd in\r"
expect "sftp> "
send "get \r"
expect "sftp> "
send "exit\r"
EOF
)
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
echo "Success";
else
echo "Unsuccessful" ;
fi
}
File_Sftp "/usr/local/bin/xxxxxx.txt"
每当我尝试执行上述 shell 脚本时,我都会遇到以下错误:
send: spawn id exp4 not open
while executing
"send "\r""
Unsuccessful
这些 bash 行不符合您的想法:
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
它们不是设置变量值,而是将位置参数 </code> 设置为给定的字符串。实际变量<strong>仍未设置</strong>。 </p>
<p><code>spawn
会尝试启动 sftp $user@$host
失败(实际上 sftp @
使用未设置的变量),expect "User Name:"
会在默认的 10 秒后超时,然后错误消息来自 send "$user\r"
(或带有未设置变量的 send "\r"
)——没有生成的进程与之交互。
如果你在测试时使用expect -d <<EOF
你可以看到这个(打开expect的详细调试输出)
你想要
user="xxxx"
password="xxxxx"
host="ftp.xxxx.xxxx.com"
或者,由于这是 bash,我们希望推广良好的编程实践(无全局变量)
local user="xxxx"
local password="xxxxx"
local host="ftp.xxxx.xxxx.com"
发送后加一个expect eof
"exit"
要查看 226
是否出现在 expect 的输出中,我会更改此
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
至
if grep -q '\<226\>' <<< "$STATUS" ; then
或
if [[ $STATUS == *226* ]]; then