我有这个小功能:
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
来允许用户在编辑它时更改该变量,而不是重新编写它。
感谢。
答案 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
,它就不起作用(从那以后没有足够的时间提示返回)。