Expect 中的后台生成进程
我正在使用期望在我的服务器上启动应用程序: #!/usr/bin/expect set timeout -1 spawn "bin/start-all.sh" expect { -re "Found MongoDB in" { send "y\r"; exp_continue } -re "Found Hadoop in" { send "y\r"; exp_continue } -re "Going to start Hadoop" { interact } } 我可以在脚本运行时的几秒钟内访问服务器上的应用程序,但是一旦结束,应用程序就变得不可用. 我期望在调试模式下运行,并将以下输出延伸到最后: expect: does "vendors area. Do you want to start it? [y/n] y\r\n" (spawn_id exp6) match regular expression "Found MongoD
30 2024-04-22
编程技术问答社区
如何禁用Process.StandardOutput中的输出缓冲功能?
这个问题已经不止一次地问,但是我在任何一个讨论中都没有找到令人满意的答案. 我正在启动一个命令行过程,该过程会产生实时测量以进行Stdout,每秒大约每秒产生新的结果.使用System.diagnostics.process.standardOutput会导致完全不可接受的滞后(超过20秒),因为Stdout数据在该过程中通过4K缓冲区工作./p> 呼叫process.standardoutput.basestream.flush()不起作用. 我尝试进行byte的字节同步读取过程.标准图,但我仍然落后于实际输出. 任何人都可以至少对我验证我可以以某种方式克服我在重定向Stdout时遇到的所有缓冲问题,并在Shell窗口中出现时在我的应用程序中接收数据吗?我可以从过程类继承并更改标准图流程阅读器的行为吗?我需要查看Raw Winapi电话吗? 以某种方式,即使我最终写了不受管理的C ++来启动任务并消耗输出并将其链接到IN中.任何帮助都非常感谢;我处于智慧...
10 2024-04-15
编程技术问答社区
从C语言调用期望文件
我编码了 ftp.exp 文件,该文件将C应用程序的日志文件发送到服务器. #!/usr/bin/expect set timeout -1 spawn ftp xxx.xxx.xxx 21 match_max 100000 expect -re {[2]{2,}[0]{1,}} send -- "usrxxxx" expect -exact "usrxxxxx" send -- "\r" expect -re {[3]{2,}[1]{1,}} send -- "xxxx\r" expect -exact "\r 230 Access granted for xxxxxxxxxx !\r Remote system type is UNIX.\r Using binary mode to transfer files.\r ftp> " send -- "put /home/User/test.txt test2.txt\r" expect -exact "put /home/Us
10 2024-04-10
编程技术问答社区
预期,将输出分配给缓冲区
#!/usr/local/bin/expect -- set env(TERM) vt100 set env(SHELL) /bin/sh set env(HOME) /usr/local/bin set PASSWORD eri set DUL [lindex $argv 0] match_max 100000 spawn ssh mashost expect { "assword" {send "$PASSWORD\r"} } expect "ranosusr@rn2osscs603" send -- "cd /var/opt/bla/edd/ARNE_SIU \r" expect "ranosusr@rn2osscs603" send -- "grep -il $DUL *\r" expect -re "$DUL.*\.xml" set outcome $expec
10 2024-04-04
编程技术问答社区
类似于窗口的工具
我正在寻找与Unix的期望工具(或者至少,至少,至少,,至少,,它的主要功能). 我想与它自动化命令行交互式程序. 编辑: 我更喜欢单一的可执行文件或小型应用,而没有大型兆字节的depencies. ty. 解决方案 看一下Activestate的 tcl Distribution 具有对Windows的期望.. 其他解决方案 迟到答案:Expect.exe,与Go一起编译,运行Lua-scripts.相当新,但确实会做应该做的事情.请参阅 https://github.com/zetamatta/expect/ 还检查封闭的问题. 其他解决方案 我猜
6 2024-03-29
编程技术问答社区
在远程计算机上运行cat并使用expect发送输出变量
我有一个bash+期望的脚本,必须通过ssh连接到远程comp(我不能使用ssh键,需要在此处进行密码标识),在此处读取文件,在其中读取文件,查找特定行,并使用" hostName"找到特定的行(例如"主机名AAAA1111")并将此主机名存储到一段时间后要使用的变量中.如何获得"主机名"参数的值?我认为该行内容将在$ Expect_out(缓冲区)变量中(因此我可以扫描并进行分析),但事实并非如此.我的脚本是: #!/bin/bash ----bash part---- /usr/bin/expect
10 2024-03-29
编程技术问答社区
Linux-Bash & Expect
我期望将键复制到远程Linux框. copy_key #!/usr/bin/expect stty echo set REMOTEhost [lindex $argv 0] set REMOTEpass [lindex $argv 1] spawn ssh-copy-id -i /home/myuser/mykey.pub root@$REMOTEhost expect "password: " send "$REMOTEpass\n" sleep 2 这是通过./copy_key 1.1.1.1 GENERATED_PASSWORD 调用的 我想将所有这些迁移到bash脚本. 类似以下内容,当然是不同的,但只是为了帮助一个想法: #!/bin/bash /usr/bin/expect -c 'expect "\n" { eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr
4 2024-03-29
编程技术问答社区
Jenkins不等待对bash脚本的调用,并期望
我有詹金斯(Jenkins)作业,在"执行shell"窗口上,我正在调用一个小应用程序,该应用程序将文件复制到某些主机. 问题是:如果我运行脚本(显示为./relmanager ...),通过SSH在控制台上的主机上手动到Jenkins运行的主机,一切正常,例如: [{USER}@{JENKINS_SERVER} release_manager]$ ./relmanager {USER} {PASSWD} u 2014_12_040 i 10.83.206.44 > Verifying configuration files... spawn scp -oStrictHostKeyChecking=no -C -r 2014_12_040 root@10.83.206.44:/srv/releases/ Password: fpga-rw.tgz 100% 7587 7.4KB/s 00:00 resetclear.tgz
8 2024-03-29
编程技术问答社区
期待脚本将su变成root并执行sed
我以前从未使用过期望,但需要一个脚本来为大量主机列表做以下内容 ssh进入机器 su root并输入root密码 在/etc/passwd中使用一个文件,将某些文本替换为其他文本,为此,让我们说原始文本是文本,然后用newText 替换它的文本 任何人可以帮忙吗? 解决方案 可以理解的是,执行脚本以处理命令是一个巨大的安全问题,通常不允许. 但是,期望有能力运行伪终端,因此可以像键盘上打字的人. 这或多或少是您所要求的,但未经测试. #!/bin/sh # if run from shell, restart with wish \ exec wish "$0" "$@" package require Expect proc fix_a_host {host usrname password root_password} { # open session to host, wait for a username promp
6 2024-03-29
编程技术问答社区
使用#!/usr/bin/expect和bash
有什么办法可以与/usr/bin/Expect命令一起使用bash脚本? 例如,我可以在usr/bin/preenge脚本中使用if语句吗? 解决方案 expect是tcl的扩展名 - 因此,您可以使用tcl的编程构造 - 其中包括'if'. tcl命令男子页面可用:其他解决方案 这是一个非常简单的脚本,可以通过bash的SSH连接到服务器: #!/bin/bash /usr/bin/expect
22 2024-03-29
编程技术问答社区
期待脚本在成功登录SSH后不发送命令
启动以下脚本时,SSH登录成功,我可以进行交互,但它不会发送cd folder命令.如果我确定这是我要发送的第一个命令,并且如何发送cd folder命令? 这是简短的期望脚本: #!/usr/bin/expect eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no host@exemple.com expect "password" send "mypassword\r" expect "$" send "cd folder\r" interact 谢谢! 解决方案 您需要expect一个更具体的外壳提示. 根据期望的手册: 请注意,在许多编辑中,^和$分别匹配行的开头和结尾.但是,由于期望是不是面向线的,因此这些字符匹配 的开始和结束(而不是线路),目前在期望匹配的缓冲区. 其他解决方案 您应该使用 ssh-keygen (或喜欢良好的讨论关于这个问题. 使用配置的密钥,您
4 2024-03-29
编程技术问答社区
运行Spawn/Expect加入活动目录
不太确定这是否是提出这个问题的正确论坛.但是我确实看到了很多特定于使用期望/产卵/发送的问题,所以它可以了.我正在构建一个bash脚本以加入Active Directory域.当我尝试执行脚本时,我会收到此错误: spawn realm join --user="foouser@foo.local" --computer-ou="OU=Foo,OU=Foo Servers,DC=foo,DC=local" FOO.LOCAL realm: Specify one realm to join send: spawn id exp6 not open while executing "send "foobarpassword\r"" 我不确定领域为什么抱怨看到多个领域,但这是我的bash脚本: #!/bin/bash ad_user="foouser@foo.local" ad_password="bar" ad_ou="OU=Foo,OU=Foo Servers,D
6 2024-03-29
编程技术问答社区
做出关于预期回报的决定
我正在尝试创建一个期望脚本,该脚本将基于" Expect" 发送不同的密码字符串 条件A:如果尚未使用用户名设置Cisco设备,则第一个提示将只是"密码:" - 然后应该使用passworda(否用户名) 条件B:如果已使用用户名进行了设置,则提示将为"用户名:",其次是"密码:" - 然后它应该使用用户名和passwordb #!/bin/bash # Declare host variable as the input variable host=$1 # Start the expect script (expect -c " set timeout 20 # Start the session with the input variable and the rest of the hostname spawn telnet $host set timeout 3 if {expect \"Password:\"} { send \"PasswordA\"
10 2024-03-29
编程技术问答社区
你能不能在bash中运行一半的脚本,另一半在expect中运行?
我试图制作一个脚本以自动化SSH登录并下载文件,以用于保存在文件中的多个IP地址,IM使用for i in $(cat /dir/file),问题是CAT函数在期望中起作用,以便我无法使用它在用期望解释的脚本上. 我想知道是否可以通过Bash来解释一半的脚本,而另一半则像这样的期望 #!/bin/bash code........ #!/usr/bin/expect code........ 我的代码现在看起来像 #!/bin/bash expect
14 2024-03-29
编程技术问答社区
在bash中用期望值通过SCP更新IOS's
美好的一天.我正在尝试创建/运行一个脚本,以使我可以将更新的iOS从服务器发送到网络设备.当我在":flash"命令之前放入手动IP地址. 时,以下代码有效. #!/user/bin/expect set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin" set pw xxxxxxxxxxxxxxxxxxx spawn scp $IOSroot 1.1.1.1:flash:/c3750e-universalk9-mz.150-2.SE10a.bin expect "TACACS Password:" send "$pw\r" interact 那里的代码效果很好,并且正如预期的那样.当我尝试将一个名为" Ioshost"的文件与IP列表一起使用并在此脚本中使用以获取一些自动化时,就会出现问题.我已经尝试了各种事情来使它起作用.其中一些如下: 设置变量 IPHosts=$(cat
0 2024-03-29
编程技术问答社区
如何将本地shell脚本变量传递给expect?
我的问题与如何通过变量从外壳脚本到期望脚本? 但略有不同: 除了传递两个运行时壳脚本变量之外,我想传递一个变量,例如: #!/bin/sh d=`date '+%Y%m%d_%H%M'` expect -c ' expect "sftp>" #use $d here(how?) ' 解决方案 您无需将日期变量传递到预期.它具有非常好的日期命令: expect -c ' # ... set d [timestamp -format "%Y%m%d_%H%M"] something_with $d # ... ' 如果您需要执行更复杂的日期操作,请阅读有关TCL 另一种通过外壳变量期望的好技术(不必做复杂/杂乱的报价/逃脱)是使用环境:导出您的外壳变量,然后使用Expect的Global env阵列访问它们: export d=$(date ...) expect -c 'puts "the date is $env(d)"' 其他
6 2024-03-29
编程技术问答社区
Sed在期望中不起作用
我用来列出该狂欢单线,我用来列出WebLogic实例及其完整的路径.这在我从外壳运行时运行良好. /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort 我试图将其纳入预期脚本 send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; ec
4 2024-03-29
编程技术问答社区
从bash脚本中调用的expect命令中的条件性状态
我一直在尝试在思科设备上自动化一些配置备份,我已经设法执行了完成任务的脚本,但我也试图改进它以处理错误. 我认为这是在两个步骤上捕获错误的必要条件,首先是在'send \'$ pass \ r \'''中获得登录错误(访问拒绝消息)和'Expect \':end end \':end \': '行,以确保发出的命令能够从设备中拉出配置. ,如果您在期望脚本上工作,我已经看到了一些方法,但是我想使用bash脚本来提供来自.txt文件的设备列表. #!/bin/bash data=$(date +%d-%m-%Y) dataOntem=$(date +%d-%m-%Y -d "-1 day") hora=$(date +%d-%m-%Y-%H:%M:%S) log=/firewall/log/bkpCisco.$data.log user=MYUSER pass=MYPASS for firewall in `cat /firewall/script/firewall.
4 2024-03-29
编程技术问答社区
期待在阿里巴巴
我正在使用bash别名,该别名使我可以缩短SSH命令,以便我登录路由器.很琐碎,但是节省时间!我现在想做的就是将其更进一步,并充分自动化路由器的登录. 例如,在我的~/.bashrc文件中,我有以下条目: sshFuncB() { ssh -o StrictHostKeyChecking=no superuser@$1 - | /usr/bin/expect
14 2024-03-28
编程技术问答社区