小编Pkp*_*Pkp的帖子

在bash脚本中帮助Expect

我写了一个期望内部的bash脚本,连接到终端服务器和清除行.我无法弄清楚我得到的错误,因为我已经给了所有必要的括号.我也不理解couldn't read file "line": no such file or directory错误.请帮助.

我的剧本:

#!/bin/bash  
VAR=$(expect -c "  
spawn telnet 1.1.1.1   
expect {  
       "Password:" { send "password\r" ; exp_continue}  
       "Prompt>" { send "en\r" ; exp_continue}  
       "Password:" { send "password\r" ; exp_continue}  
       "Prompt#" {send "clea line 10\r" ; exp_continue}  
       "[confirm]" {send "Y\r" ; exp_continue}  
       "Prompt#" {send "clea line 11\r" ; exp_continue}  
       "[confirm]" {send "Y\r" ; exp_continue}  
       "Prompt#" {send "exit\r" }  
    }  
")  

echo $VAR  
Run Code Online (Sandbox Code Playgroud)

它的输出:

missing close-brace  
    while executing  
"expect"  
couldn't read file …
Run Code Online (Sandbox Code Playgroud)

bash expect

10
推荐指数
1
解决办法
4万
查看次数

指向struct成员的指针

我正在尝试编写一个C程序.我需要变量"recq"的地址.有人可以帮我解决这个问题吗?

typedef struct {  
    int recq;  
} dd;  


struct test {  
    dd a;  
};

main(){  
    struct test *mm;  
    mm=(struct test *) malloc (sizeof (struct test));    
    ss=&(mm->a.recq);    
    printf("%p",ss);    

}      
Run Code Online (Sandbox Code Playgroud)

c struct pointers

6
推荐指数
2
解决办法
1万
查看次数

我怎么说我已经完成了交互模式?

我正在用bash编写一些期望命令.

脚本:

#!/bin/bash  
set timeout -1  

expect -c "  

spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
expect Prompt1>  
interact timeout 20 {  
sleep 1  
}  

expect {  
Prompt2> {send \"dir\r\" }  
}    

"  
Run Code Online (Sandbox Code Playgroud)

我对脚本的意图是,首先让它telnet到一台机器,当它看到Prompt1时,让它控制我,我将执行一个命令来加载一个特定的图像.然后等待Prompt2显示(表示图像已加载).然后让它执行另一组命令.

运行脚本后,我可以进入交互模式,加载我的图像.问题是在远程计算机上退出交互模式并对其进行控制.

我得到的错误:

expect: spawn id exp4 not open  
    while executing  
"expect -nobrace Prompt2 {send "dir\r" }"  
    invoked from within  
"expect {    
Prompt2 {send "dir\r" }  
}"  
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

expect

5
推荐指数
1
解决办法
1万
查看次数

命令未找到bash脚本中的错误

我写了一个bash脚本.它基本上根据输入参数获取三个路径,然后获取路径中的imagename/filename.

像:
我提供:

AA=/home/user
Run Code Online (Sandbox Code Playgroud)

然后它使用find命令获取
/home/user/dir2/images/dir/tellmeimage1fun.bin

最后,我必须将tellmeimage1fun.bin作为输出.

脚本:

#!/bin/bash  

echo "arg0 n/k/d"  

AA=$1  
CC=$3  

PATH1="`find $AA/dir2/images/dir/ -name *image1*.bin`"  
PATH2="`find $AA/dir2/images/dir/ -name *bimage2*.bin`"  
PATH3="`find $AA/dir2/images/dir/ -name *cimage3*.bin`"  

if [ $CC = "n" ] ; then  
    PATH=$PATH1  
elif [ $CC = "k" ] ; then  
    PATH=$PATH2  
else  
    PATH=$PATH3  
fi  

#Getting filename name from path:  
IMG="`ls $PATH | cut -d "/" -f6`"

OUTPUT:  
/users/prasapat/bin/sl5: line 22: ls: command not found  
/users/prasapat/bin/sl5: line 22: cut: command not found  
Run Code Online (Sandbox Code Playgroud)

如果我给ls提供完整的路径并切断它们的工作.但我不想为脚本中的所有命令执行此操作.如果我删除最后一行并回显PATH变量,那就完全没问题了.只有在添加最后一个命令后,才能看到问题.
如果我做了任何明显的错误,请帮助并告诉我.

bash

5
推荐指数
1
解决办法
2万
查看次数

每秒蜱和jiffies.有什么不同?

在Linux上,每秒jiffies和ticks之间有区别吗?我理解jiffies和HZ之间的关系.但我无法理解每秒的滴答声是如何相关的.我在某处看到它是一个内部操作系统计时器,但是当我们有jiffies时为什么还需要另一个呢?有人可以解释一下吗?

linux-kernel

5
推荐指数
1
解决办法
3381
查看次数

虽然期望循环

我在bash中使用expect.我希望我的脚本telnet到一个框中,期待一个提示,发送一个命令.如果现在有不同的提示,则必须继续,否则它必须再次发送该命令.我的脚本是这样的:

\#!bin/bash  
//I am filling up IP and PORT1 here  
expect -c "    
set timeout -1  
spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
set temp 1  
while( $temp == 1){    
expect {  
Prompt1 { send \"command\" }  
Prompt2 {send \"Yes\"; set done 0}  
}  
}  
"  
Run Code Online (Sandbox Code Playgroud)

输出:

invalid command name "while("  
    while executing  
"while( == 1){" 
Run Code Online (Sandbox Code Playgroud)

请帮助我.
我试着改变它 while [ $temp == 1] {

我仍然面临以下错误:

输出:

invalid command name "=="  
    while executing  
"== 1"  
    invoked from within …
Run Code Online (Sandbox Code Playgroud)

bash expect while-loop

4
推荐指数
1
解决办法
2万
查看次数

Vim窗口调整大小

我在Vim水平分割我的窗户.但是在我拆分后,新窗口占据原始窗口大小的一半,我想改变它并确保新窗口占据几乎整个旧窗口.

基本上如果我在Vim中使用水平分割打开三个文件,我应该在屏幕底部看到三个状态栏,第三个文件占据屏幕的其余部分.我已经知道的文件可以通过Ctrl+ W+箭头键导航.因此,如果我现在导航到第二个文件,我应该在底部看到一个状态栏,在顶部看到一个状态栏.

请告诉我如何配置相同的.我在线查看所有我能找到的动态更改大小或调整大小的选项,但我想要静态一次性配置(例如,在vimrc或中bashrc).

vim

2
推荐指数
2
解决办法
4993
查看次数

C- 浮点精度

我有一个程序:

int main() 
{   
        float f = 0.0f;  
        int i;  

        for (i = 0 ; i < 10 ; i++) 
                f = f + 0.1f; 

        if (f == 1.0f) 
                printf("f is 1.0 \n"); 
        else 
                printf("f is NOT 1.0\n"); 

        return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

它总是打印f is NOT 1.0. 我知道这与 C 中的浮点精度有关。但我不确定它到底在哪里搞砸了。有人可以解释一下为什么不打印另一行吗?

c floating-point precision

1
推荐指数
1
解决办法
7831
查看次数

C中的后增量和前增量

我对这两个C语句有疑问:

  1. x = y++;

  2. t = *ptr++;

使用语句1,y的初始值被复制到x然后y递增.

使用语句2,我们查看*ptr指向的值,将其放入变量t,然后稍后增加ptr.

对于语句1,后缀增量运算符的优先级高于赋值运算符.所以不应该首先递增y,然后将x赋值给y的递增值?

在这些情况下,我不理解运算符优先级.

c operator-precedence pre-increment post-increment

0
推荐指数
2
解决办法
6484
查看次数