可以期望产生一个bash函数?

时间:2016-05-10 00:39:13

标签: linux bash function tcl expect

这是一个非常简单的例子:

# expect -c "spawn socat -v -,raw,echo=0,nonblock /dev/ttyS0; interact"

expect执行内联脚本,该脚本生成socat以连接到serial设备。但是,如果我们有一个名为serial的bash函数(这非常方便),那该怎么办:

# serial(){ socat -v -,raw,echo=0,nonblock /dev/ttyS0;}
# expect -c "spawn serial; interact"
spawn serial
couldn't execute "serial": no such file or directory
    while executing
"spawn serial"

是否可以强制expect执行函数,而不使用包装器脚本或二进制文件?

2 个答案:

答案 0 :(得分:2)

您可以export shell函数,以便新的spawn ed shell可以调用它。例如:

% cat foo.sh
the_func()
{
    echo hello world
}
export -f the_func

expect -c "spawn bash -c the_func; interact"
% bash foo.sh
spawn bash -c the_func
hello world
%

答案 1 :(得分:1)

要在spawn内运行bash函数或内置函数,必须使spawn成为运行函数或内置函数的bash子进程。这是通过bash的-c选项完成的,它允许您为bash运行提供一个内联脚本。

spawn bash -c "serial"

请记住,-c之后的单个参数是要运行的内联脚本。之后的参数将被赋予bash的位置参数。