
linuxexpect命令不能用于Linux系统,它是一个Perl模块,用于编写自动化脚本。它可以用于启动和控制其他应用程序,比如telnet、ftp、ssh等,以及解析输出并执行相应的命令。
/asm -logfile $logfile_basename"_cpu3212log" 这个命令打出后是提示的input->的话,
你的监视的字符应该是 expect "input->" 或者 "input"
bash调用expect的时候直接/expectTest $logfile_basename 你试一下 没有 -
给你改半天问题太多了 告诉我你要做个什么样的功能 我给重写遍吧改比重写都费劲
如果你非要自己写 就把函数传值和返回值那地方在看看
#include <stdioh>
int len(int n);
void row_transformation_1(int n,int p[],int i,int j,int l);
void row_transformation_2(int n,int p[],int i,int j);
void row_transformation_3(int n,int p[],int i,int l);
int det(int n,int p[]);
int main()
{
int n;
int i,j;
int a[100],b[100];
int p;
scanf("%d",&n);
p=a;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{scanf("%d",&a[i][j]);}
for(;j<2n;j++)
{
if(i==(j-n)) a[i][j]=1;
else a[i][j]=0;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
b[i][j]=a[i][j];
}
if(det(n,b)==0) printf("The inverse matrix does not exist\n");
else
{ for(j=0;j<n-1;j++)
{
if(a[j][j]==0)
{ for(i=j;i<n;i++)
{if(a[i][j]!=0) {void row_transformation_2(n,a,j,i); break; }}
}
else
{for(i=j+1;i<n;i++) row_transformation_1(n,a,j,i,a[j][j]/a[i][j]);}
}//变成上三角矩阵
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
{
row_transformation_1(n,a,i,j,1/a[j][j]);
}
row_transformation_3(n,a,i,1/a[i][i]);
}//变成单位矩阵
for(i=0;i<n;i++)
{
for(j=n;j<2n;j++)
{printf("%d\t",a[i][j]);}
putchar('\n');
}//输出
}
return 0;
}
void row_transformation_1(int n,int p[],int i,int j,int l)
{
int k;
for(k=0;k<n;k++)
{ ((p+i)+k)-=(((p+j)+k))l; }
}
void row_transformation_2(int n,int p[],int i,int j)
{
int t,k;
for(k=0;k<n;k++)
{ t=((p+i)+k);
((p+i)+k)=((p+j)+k);
((p+j)+k)=t;
}
}
void row_transformation_3(int n,int p[],int i,int l)
{ int k;
for(k=0;k<n;k++)
{ ((p+i)+k)/=l; }
}
int len(int n)
{return n;}
int det(int n,int p[])
{
int i,j,k,m,sum=0;
if(n>1)
{ for(k=0;k<n;k++)
{
int a;
a=(int)malloc(100);
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1;i++)
{
if(j>=k) m=1; else m=0;
a[i][j]=((p+i+1)+j+m);
}
}
sum+=((p+k))(pow(-1,k+2))(det(n-1,a));
}
}
else return p;
return sum;
}
给你改完能编译通过了 没看明白你要的什么功能所以也不知道好不好使
参考这样的。正则去掉也可以
expect "(yes/no)" {
send "yes\r"
expect "password:"
send "$password\r"
} "password:" {send "$password\r"}
推荐Windows下解释执行的脚本语言:简单网络管理语言(Simple Network Management Language)是一种类自然语言的脚本语言,它采用snmp、telnet、ping、dns、arp、ssh、tcp、udp、web等协议访问网络设备,内置smtp协议用于告警等邮件的发送,支持excel、mysql、sqlite等3种方式进行网管数据的存取。
最新版本: snml813(ladybird20200205) utf8&ipv6
手册最新版:>
脚本如下:\x0d\\x0d\#!/usr/bin/expect -f\x0d\\x0d\set password 密码\x0d\\x0d\spawn scp 用户名@目标机器ip:拷贝文件的路径 存放本地文件的路径 \x0d\set timeout 300 \x0d\expect "用户名@目标机器ip's password:" #注意:这里的“用户名@目标机器ip” 跟上面的一致\x0d\set timeout 300 \x0d\send "$password\r"\x0d\set timeout 300 \x0d\send "exit\r"\x0d\\x0d\expect eof\x0d\\x0d\附:scp参数\x0d\-r:拷贝目录\x0d\-c:允许压缩\x0d\\x0d\一个完整的例子\x0d\\x0d\#!/usr/bin/expect -f\x0d\set password 123456\x0d\#download\x0d\spawn scp root@1921681218:/root/awmv /home/yangyz/\x0d\set timeout 300 \x0d\expect "root@1921681218's password:"\x0d\set timeout 300 \x0d\send "$password\r"\x0d\set timeout 300 \x0d\send "exit\r"\x0d\expect eof \x0d\\x0d\#upload\x0d\spawn scp /home/yangyz/abcsql root@1921681218:/root/testsql \x0d\set timeout 300 \x0d\expect "root@1921681218's password:"\x0d\set timeout 300 \x0d\send "$password\r"\x0d\set timeout 300 \x0d\send "exit\r"\x0d\expect eof
现有解决方案有expect 和 sshpass 等第三方解决方案,因不想引入过多依赖决定自己实现。
通过查找 资料 发现以上方案是对tty直接写入来达到效果,但是我用bash脚本直接对tty写入确只能在屏幕显示,不能被程序获取,于是转入使用ruby按照以上资料来自己实现,
发现将第6,7,8行注释掉之后报如下错误:
对ssh_askpass 查找 资料 发现环境变量 SSH_ASKPASS 和 DISPLAY可以定义一个程序用来在ssh没有联接终端时提供密码。
SSH_ASKPASS 设为提供密码的程序
DISPLAY 设为 :0
测试发现ssh 调用 SSH_ASKPASS 定义的程序时,带 参数执行,如
# $SSH_ASKPASS root@xxxxxxxx's password:
只要程序打印正确密码,ssh即可验证通过,于是问题解决,也不需要用ruby去实现了。
示例如下:
项目GitHub地址
这样即可自动输入密码ssh登录。
网上几乎都是expect 和 sshpass等方案来实现自动输入密码,此方法原理网上资料少有,记录之。
20161124
以上就是关于linuxexpect命令不能用全部的内容,包括:linuxexpect命令不能用、linux下利用expect SHELL编程问题、expect '=', ',', ';', 'asm', or '_attribute_' before '{' token 是什么意思!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)