Unix - 执行命令时预期不工作

Posted

技术标签:

【中文标题】Unix - 执行命令时预期不工作【英文标题】:Unix - Expect Not Working While Executing Commands 【发布时间】:2018-10-19 04:11:53 【问题描述】:

我正在尝试使用 send 和 expect ssh 模块在远程 UNIX 主机上执行命令,但即使脚本成功登录到服务器,它也不会执行命令。

#!/usr/bin/expect
set timeout 60
spawn ssh xxxx@xxxxxx

expect "yes/no" 
        send "yes\r"
        expect "*?assword"  send "xxxxxx\r" 
         "*?assword"  send "xxxxxxx\r" 

expect "$ "
#sleep 5
send "ps -aef \r"

输出

[xxxxx@xxxxxx Scripts]$ ./TestExpect.sh
spawn ssh xxxxx@xxxxxx

xxxxxx@xxxxxx's password:
Last login: Wed May  9 02:05:47 2018 from xxxxxxxxx
Kickstarted on 2015-05-12
[xxxxx@xxxxx ~]$ [xxxxxx@xxxxx Scripts]$

提示如下所示

[aacdd123@linprod345 ~]$

【问题讨论】:

【参考方案1】:

问题可能是因为您在发送ps -aef 后没有任何期待。因此,在打印输出之前,expect spawn 进程已经退出。

尝试在发送ps -aef后添加更多命令

send "ps -aef\r"
expect $prompt
send "echo hello\r"
expect $prompt

也可以尝试查看 expect_out 缓冲区,这将为您提供捕获的流。

puts $expect_out(buffer)

【讨论】:

好建议。我还建议脚本以send "exit\r"; expect eof 结尾

以上是关于Unix - 执行命令时预期不工作的主要内容,如果未能解决你的问题,请参考以下文章

某些 Unix 命令在使用 JSch 通过 Java 执行时失败并显示“... not found”

理解Unix可执行文件

unix 命令

如何在单行中执行多个FTP命令?

在Python中从Local执行Unix命令

AWK 命令在 AIX 上未按预期工作