小编Ric*_*ard的帖子

使用expect生成带有包含空格的参数的命令

我想用来在ssh expect上运行一个简单的命令cat /tmp/id_rsa.pub.

在shell中,我可以运行这个问题,(手动输入密码)

ssh root@localhost 'cat /tmp/id_rsa.pub'
Run Code Online (Sandbox Code Playgroud)

我想用它自动化expect.我的expect剧本是,

#!/usr/bin/expect
eval spawn ssh root@localhost 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof
Run Code Online (Sandbox Code Playgroud)

它抛出错误bash: cat /tmp/id_rsa.pub: no such file or directory.它看起来很奇怪.可能的原因是什么?

编辑:经过一些测试,我发现这很常见,不仅仅是在这种情况下cat.如果生成命令的参数是带空格的(即使它在引号中),它也会有问题.例如,用cat /tmp/id_rsa.pub空格替换其他命令,例如

eval spawn ssh root@localhost 'which java'
Run Code Online (Sandbox Code Playgroud)

它抱怨bash: which java: command not found.但是,如果替换它pwd,就像

eval spawn ssh root@localhost 'pwd'
Run Code Online (Sandbox Code Playgroud)

它工作正常.

bash automation automated-tests expect

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

使用另一个可变参数函数的未命名参数调用可变参数函数

我有两个可变函数作为foo(format, ...)bar(format, ...).我想实现函数,foo以便它可以bar使用相同的参数列表调用它.那是,

foo(format...)
{
 ...
 bar(format, ...);
}
Run Code Online (Sandbox Code Playgroud)

例如,调用foo("(ii)", 1, 2)bar使用相同的参数调用bar("(ii)", 1, 2).该foo功能应该如何实施?

PS:函数bar来自遗留库,我无法更改其界面.

c c++ variadic-functions

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

如何在bash脚本中传递带空格的命令行参数

假设有一个脚本s1,我需要传递$1带有值的参数foo bar,其中包含空格.这可以做到

./s1"foo bar"

但是,当我想在另一个脚本(例如s2)中运行上述命令时,我应该怎么做呢?如果我把它如上所述,foo bar将被解释为两个参数(到s1)而不是一个.

bash command-line-arguments

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

在运行时动态修改符号表(在C中)

是否可以在运行时用C动态修改符号表(在Linux上以elf格式)?

我最终的目标是:

在某些函数内部说foo,我想覆盖malloc我的自定义处理程序的函数my_malloc.但在外面foo,任何人malloc都应该像glibc一样调用malloc.

注意:这与在整个程序执行期间LD_PRELOAD覆盖的不同malloc.

symbols elf ld-preload

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

在eclipse cdt中,如何构建除第一个之外的目标

我是使用eclipse cdt的新手.我有一个makefile项目,在我的Makefile中有两个以上的目标.说Makefile如下,

all: 
 ...
t1:
 ...
t2:
 ...
Run Code Online (Sandbox Code Playgroud)

CDT构建目标"全部"很容易.但是,如何构建除第一个之外的目标,如t1和t2?谢谢.

eclipse makefile

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

在linux中执行信号处理程序是不可抢占的?

我有一个p注册了信号处理程序的进程SIGALRM.设置定时器以周期性地发送信号SIGALRM进行处理p.还有多个线程在运行p.信号处理程序在被触发和执行时是否是不可抢占的?或者说,是否信号处理程序的执行不会被进程中的任何线程中断p

PS:我认为信号处理程序是在内核中执行的(是吗?)而内核对于用户模式线程是不受限制的?纠正我,如果它错了......

multithreading operating-system signal-handling

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

如何执行存储在一个bash变量中的两个命令

假设有一个bash变量

RUN1 = "日期"

我需要执行date

$ {} RUN1

它起作用,因为它打印当前时间.但是如果我在变量中放入两个命令,

run2 ="date; echo foo"

抱怨run2,我无法执行存储在变量中的命令${run2}

date ;:找不到命令

bash

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

如何在tail -f命令后继续运行脚本

我有以下脚本:

tail -f nohup.out
echo 5
Run Code Online (Sandbox Code Playgroud)

当我按下Ctrl+ Ctail -f,脚本停止运行:5不打印.echo 5停止命令后如何运行tail命令?

bash signals tail

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

使用"nohup"在后台运行"top"命令

我在使用nohup在后台运行top命令时遇到问题.首先,我在本地运行,如

nohup top &
Run Code Online (Sandbox Code Playgroud)

它抱怨nohup.out文字top: failed to get tty.我的最终目标是在远程机器上运行,如

nohup ssh -t user@hostname top &
Run Code Online (Sandbox Code Playgroud)

目前,上述命令也失败了

Pseudo-terminal will not be allocated because stdin is not a terminal.^M 
TERM environment variable not set
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

PS:我运行此命令ping machineBmachineA.machineA总是活着,但并非总是登录.

bash signals nohup

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

如何从内核向用户空间发送信号

我的内核模块代码需要发送信号[ def。]用户土地计划,以将其执行转移到注册的信号处理程序。

我知道如何在两个用户登陆进程之间发送信号,但是我找不到有关该任务的任何在线示例。

具体来说,我的预期任务可能需要如下所示的接口(一旦error!= 1,int a=10不应执行代码行):

void __init m_start(){
    ...
    if(error){
        send_signal_to_userland_process(SIGILL)
    }
    int a = 10;
    ...
}

module_init(m_start())
Run Code Online (Sandbox Code Playgroud)

signals linux-kernel

5
推荐指数
3
解决办法
6780
查看次数