将文本粘贴到终端

时间:2017-02-15 14:56:46

标签: bash perl

我有这个小功能:

writecmd () {
  perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ;
}

它将我提供的文本打印到STDOUT,并将其打印到命令行缓冲区。

例如:

[root]$ echo "text" | perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ;
text[root]$ text

如何让它不将文本输出到STDOUT而只输出到cli缓冲区?

或者更具体地说,我用它来打印一个变量,之后我使用read来允许用户在编辑它时更改该变量,而不是重新编写它。

感谢。

1 个答案:

答案 0 :(得分:1)

似乎终端的输出在某种程度上与执行ìoctl时是否返回提示相关。例如,以下按预期工作:

use strict;
use warnings;

my $pid = fork();
if ( $pid == 0 ) {
    sleep 1;
    my $cmd = "ls";
    # 0x5412 = TIOCSTI, see c include file: <asm-generic/ioctls.h>
    ioctl STDOUT, 0x5412, $_ for split //, $cmd;
}

如果我删除sleep 1,它就不起作用(从那以后没有足够的时间提示返回)。