【发布时间】:2023-03-25 13:39:01
【问题描述】:
我正在尝试运行期望脚本,但出现错误:
send: spawn id exp4 not open
while executing
"send "password"
我的脚本很简单:
#!/usr/bin/expect -f
#!/usr/bin/env expect
#!/usr/bin/env export
#!/bin/sh
#!/bin/bash
spawn sftp -o IdentityFile=/home/localUser/MyPrivKeys_open.ppk user@123.123.123.123
expect "sftp.gatewayEnter passphrase for key '/home2/localUser/MyPrivKeys_open.ppk':"
send "passphrase\r"
expect "sftp>"
send "cd /home/localUser/localPath \r"
expect "sftp>"
send "mget myfile.xml /home/localUser/localPath \r"
set timeout 5
interact
我所做的是在 notepad.exe 中编辑我的期望脚本,但是当我上传我的脚本时,我必须运行下一个命令:
dos2unix bash.sh -> 将dos文件转换为Unix文件
chmod +x bash.sh -> 赋予执行权限
最后我运行我的脚本:
./bash.sh
但之后它会发送该错误。 这真的很奇怪,因为我有另一个具有相同结构的 .sh 文件,而我只是更改获取文件的路径
我想我需要一些帮助。
谢谢。
【问题讨论】:
-
看起来 sftp 命令在您获得密码之前就终止了。在spawn命令前加上
exp_internal 1,看看调试输出有没有线索。 -
格伦,我已经把你告诉我的和结果是:父母:等待同步字节父母:告诉孩子继续父母:现在与孩子不同步产生:返回 {12374} 期望:确实"" (spawn_id exp4) 匹配 glob 模式 "sftp.gatewayEnter passphrase for key '/home2/localUser/MyPrivKeys_open.ppk':"?没有期望:读取 eof 期望:设置期望输出(spawn_id)“exp4”期望:设置期望输出(缓冲区)“”发送:发送“密码\r”到 { exp4 发送:生成 id exp4 在执行“发送”密码\r 时未打开“”(文件“./bash.sh”第 13 行)您对此有何看法?谢谢大佬!
-
我在那里看到“read eof”,这表明 sftp 已关闭。我不知道为什么。
-
谢谢。有什么办法可以解决吗?
标签: linux bash shell unix expect