키보드에서 입력을 받아 멋진 시각화를 제공하는 프로그램이 있습니다. 이 프로그램의 목적은 우리 아기가 키보드로 타이핑을 하고 컴퓨터가 뭔가를 하게 하는 것입니다.
그런데 메인 프로그램과 연결이 끊긴 키보드 입력 살균 프로그램을 작성하고 싶습니다. 개념적으로 나는 프로그램이 다음을 수행하기를 원합니다.
sanitize_keyboard_input | my_program
my_program
키보드에서 입력을 받고 있다고 생각하지만 실제로는 에서 입력을 받고 있습니다 sanitize_keyboard_input
. 이를 수행할 수 있는 방법이 있습니까? 도움이 된다면 Ubuntu Linux를 실행하고 있습니다.
답변1
나는 이것을 오래 전에 썼다. 이는 사용자 입력과 대화형 프로그램 사이에 위치하며 입력을 가로챌 수 있도록 하는 스크립트입니다. 많은 문제를 일으킨 오래된 Fortran 프로그램을 실행할 때 파일 이름을 확인하기 위해 쉘로 탈출하는 데 사용했습니다. 특정 입력을 가로채서 삭제하도록 쉽게 수정할 수 있습니다.
#!/usr/bin/perl
# shwrap.pl - Wrap any process for convenient escape to the shell.
use strict;
use warnings;
# Provide the executable to wrap as an argument
my $executable = shift;
my @escape_chars = ('#'); # Escape to shell with these chars
my $exit = 'bye'; # Exit string for quick termination
open my $exe_fh, "|$executable @ARGV" or die "Cannot pipe to program $executable: $!";
# Set magic buffer autoflush on...
select((select($exe_fh), $| = 1)[0]);
# Accept input until the child process terminates or is terminated...
while ( 1 ) {
chomp(my $input = <STDIN>);
# End if we receive the special exit string...
if ( $input =~ m/$exit/ ) {
close $exe_fh;
print "$0: Terminated child process...\n";
exit;
}
foreach my $char ( @escape_chars ) {
# Escape to the shell if the input starts with an escape character...
if ( my ($command) = $input =~ m/^$char(.*)/ ) {
system $command;
}
# Otherwise pass the input on to the executable...
else {
print $exe_fh "$input\n";
}
}
}
간단한 예제 테스트 프로그램을 시도해 볼 수 있습니다.
#!/usr/bin/perl
while (<>) {
print "Got: $_";
}