预期脚本中的超时不起作用
我创建了以下预期脚本以便自动登录VPN: #!/usr/bin/expect set PASS [lindex $argv 0] set timeout 10 spawn vpnc expect : {send $PASS\r} expect eof 但是,当我输入错误的密码参数时,预期的 10 秒并没有发生。 为什么没有发生这个10秒超时? ...
我创建了以下预期脚本以便自动登录VPN: #!/usr/bin/expect set PASS [lindex $argv 0] set timeout 10 spawn vpnc expect : {send $PASS\r} expect eof 但是,当我输入错误的密码参数时,预期的 10 秒并没有发生。 为什么没有发生这个10秒超时? ...
我正在尝试使用 从使用 telnet 样式界面的机器读取数据expect。交互式 telnet 会话的工作方式如下: % telnet 10.92.177.14 53595 Trying 10.92.177.14... Connected to 10.92.177.14. Escape character is '^]'. NOKEY power_status ? "on" ^] telnet> Connection closed. 我发送了命令power_status ?并得到了响应"on"。 我尝试了以下预期脚本: #!/usr/bin/expe...
Expect 脚本非常适合编写测试,这些测试基本上是“确保运行此命令会导致打印这些日志”。Expect 可让您跳过不相关的输出并查找日志中的特定行。 有没有办法确保我们不遇到某条信息? 例如,一个简单的 Expect 脚本可能如下所示: spawn ./my_launcher.sh expect "System booted." 有什么办法可以确保我们不在“系统启动。”行出现之前获取某个字符串? 用假想语法来传达我的目标: spawn ./my_launcher.sh expect-not "license activation error" expect...
我发现自己必须执行一系列操作ssh才能到达特定主机。我现在所做的就是将命令一个接一个地复制并粘贴到终端中,就像机器一样。我想知道是否有办法将这些固定命令重播到我的终端中。 我确实使用过tmux,而且我知道tmux send;但我希望“智能地”执行此操作,即在发送下一个 ssh 命令之前等待提示。我也知道expect,但我见过的用法是终端spawn在脚本内运行并从脚本内进行交互 — 生成的终端随 expect 脚本一起消失。 最理想的情况是,我可以expect在打开的终端上执行该操作。有办法做到这一点吗,或者还有其他方法吗? ...
我正在尝试使用 expect 与 MATLAB 控制台交互。目前我有: #!/usr/bin/expect -f spawn {*}/usr/bin/run.sh matlab -r "fprintf(1, \"The identifier was:%s\\\\n\", \"hello\")" expect { "The identifier is hello" { return } timeout { exit 7 } eof { return } } 但这会出...
我正在测试一个 expect 脚本,发现使用set timeoutvs时有两种不同的行为expect -timeout。这是一个简单的例子 response.sh: #!/usr/bin/bash sleep 2 echo hello test1.sh: #!/usr/bin/expect spawn ./response.sh set timeout -1 expect { timeout { send_user "timeout\n" } "hello" { send_user "received he...
我有一个 bash 来回答以下问题免费文件同步安装过程中使用 expect 进行询问: #!/bin/bash tar -xf FreeFileSync*.tar.gz mv FreeFileSync*.run FreeFileSync.run >/dev/null 2>&1 chmod +x FreeFileSync.run /usr/bin/expect << EOF set timeout -1 log_user 0 spawn ./FreeFileSync.run --accept-license log_user ...
此脚本旨在将我家里的服务器内容安装为 mac os 中的可读/可写驱动器。不幸的是,由于我家有一个动态公共 IP 地址,服务器的 IP 地址会不时更改。我的解决方案是通过从文件中读取 IP 地址来使脚本运行。当我仅使用 expect 脚本时,一切都正常工作,但我无法弄清楚如何从 expect 中的文件中读取变量,当我在 bash 中重写 expect 脚本时,它停止工作。这是我的代码: #!/bin/bash file=/Users/cm4nxd/Library/Scripts/current.ip ipaddress=$(<"$file") /u...
我希望这个预期脚本永远运行(或者直到打印“ok”),但是它却没有运行,而是立即退出。 #!/usr/bin/expect set timeout 180 spawn ssh -o "StrictHostKeyChecking no" [email protected] expect "password: " send "[lindex $argv 1]\n" expect "$ " send { while true ; do sleep 1s STRLIST=`echo pippo` [[ ${#STRLIST} -ge ...
我想用 expect 和 for 循环远程执行一个脚本: #!/usr/bin/expect set timeout 10 spawn ssh [email protected] expect "password: " send "pass\n" expect "$ " send "for i in `ls` ;\n" send "do\n" send " STRLENGTH=$(echo -n $i | wc -m);\n" send " if [ $STRLENGTH -ge 35 ];\n" send " then echo ...
我有一个数组,$HOSTS其中包含一组主机名。我有一个数据库表,其中包含一组 IP 地址。我想遍历该表中的每个 IP 地址并向hostname -s该地址发送命令 (),然后将输出添加到$HOSTS。远程服务器未配置 PKI,并且脚本必须在无人干预的情况下自动运行。这是一个封闭的网络,root 密码作为变量存储在脚本中 ( $SERVERPASSWORD)。在有人说之前,我意识到将 root 密码放在这样的变量中并不是一个好主意,但在这种情况下,与保护 root 密码相比,不进行任何人为交互更为重要。 这是我当前(已清理)脚本的相关部分: for IP...
我有一个简单的预期脚本,它提供 4 次密码。我使用以下方法将输出记录到日志文件中: log_file -a /home/applusr/e291505/logs/ADD.log spawn /home/root/admin/add.mims.user $username "$firstname $lastname" #!/usr/local/bin/expect set username [lindex $argv 0] set firstname [lindex $argv 1] set lastname [lindex $argv 2] set my...
我有一个预期脚本,它会生成一个进程,然后进行一些初始化(身份验证),然后执行一些需要事先身份验证的任务。 考虑扩展脚本以在初始化后执行多个任务,我想知道是否可以使用单独的预期进程来执行每个任务(一旦生成的进程终止,它就需要重新进行身份验证)。 因此这意味着: 首先期望抵押一个进程并进行初始化. 那么 expect 存在,但是使生成的进程保持活动状态。 对于要执行的每个任务:启动另一个 expect 进程重新连接到之前生成的进程。此步骤将根据需要重复多次。 最后一个 expect 重新连接到生成的进程,并执行干净关机这个过程 这可能吗?优点是,对于...
我有一个带有 spawn、expect 和 send 的基本 scp 发送机制。 然而它在 scp 传输期间中止了。 这是期望命令: expect -c "spawn sh -c {scp -r -P 22 /tmp/rootfs/* root@IP:/.} expect { password: {send \"pw12\r\"; exp_continue } } exit" 这在 scp 传输期间被中断。 但是如果我尝试这样做: scp -r -P 22 /tmp/rootfs/* root@IP:/. 它会要求输入密码,然后我输入密码,...
我试图执行一个 ssh 命令来打印出/etc/shadow文件。显然该文件需要 root 或sudo权限,而我没有 root 凭证,因此我必须使用sudo。 这是我制定的命令: expect -c 'spawn -noecho ssh -q -t -S /tmp/t2.ssh dummy "sudo cat /etc/shadow";expect "assword"; send "password99\r";interact' 它输出的正是我需要的内容,但它还在第一行输出 sudo 密码的提示: [sudo] password for stud...