pipeto

pipeto

rlwrap별표로 팁을 색칠하는 데 사용하는 것 CLI:

rlwrap -s 99999 -a -pRED /usr/sbin/asterisk -r

man rlwrap나도 사용할 수 있다고 읽었어

rlwrap -z pipeto

셰이더 파이프라인을 통해 출력됩니다. grc다음과 같이 작동하는 셰이더가 있습니다 .

cat foo | grcat <conf_file>

위의 예는 foo의 규칙을 사용하여 색상이 지정되었습니다 <conf_file>.

rlwrap -z pipetothrough의 출력에 색상을 지정하는 방법은 무엇입니까 ?rlwrapgrcat

답변1

pipeto

불행하게도 rlwrap내장 필터는 pipeto원하는 방식으로 출력을 필터링하지 않습니다. 문서가 매우 오해의 소지가 있다고 생각하지만 rlwrap -z pipeto some-shell대화식으로 실행하면 다음과 같은 작업이 수행됩니다.

  • 파이프 기호( ) 없이 명령을 입력하면 |해당 명령은 그대로 전달되고 some-shell해당 출력은 간단히 인쇄됩니다.

  • 를 입력하면 command | filter이는 인터프리터 command로 전달 되고 해당 출력은 인쇄 전에 파이프됩니다( Unix 셸의 명령줄에서 실행할 수 있는 명령은 어디에 있습니까?).some-shellfilterfilter

rlwrap -z pipeto asterisk따라서 좋은 소식은 | grc실행한 다음 별표에 전달하는 각 명령에 추가하는 것을 기억하여 원하는 동작을 얻을 수 있다는 것입니다. 하지만 그건 별로 편리하지 않죠? 그러므로 outfilter.

outfilter

다음 필터 스크립트를 만드는 것이 좋습니다 rlwrap.

#! /usr/bin/perl
use lib ($ENV{RLWRAP_FILTERDIR} or ".");
use RlwrapFilter;
use strict;

my $filter = new RlwrapFilter;
my $name = $filter->name;

my $filter_command = join ' ', @ARGV;

$filter->help_text("Usage: rlwrap -z '$name <filter-command>' <command>\n"
                   . "Filter <command> output through <filter-command>");

$filter->output_handler(sub {""});
$filter->prompt_handler(\&prompt);
$filter->run;

sub prompt {
    my $prompt = shift;

    my $output = $filter->cumulative_output;
    $output =~ s/\r//g;

    open (PIPE, "| $filter_command")
        or die "Failed to create pipe: $!";
    print PIPE $output;
    close PIPE;

    return $prompt;
}

로 저장하고 outfilter실행 가능하게 만든 후 실행하십시오 rlwrap -z './outfilter <coloring-filter>' shell. 나는 이전에 시도했습니다:

rlwrap -z './outfilter ccze -A' gosh

이것은 Gauche의 출력물을 멋지게 색칠합니다. 귀하의 경우 다음과 같습니다.

rlwrap -z './outfilter grcat grcat-config' asterisk

필터가 마음에 들고 경로를 지정하지 않고 실행할 수 있으려면 내장 필터와 함께 필터를 이동할 수 있습니다(내 시스템의 디렉토리 /usr/share/rlwrap/filters).

작성된 필터는 아마도 비효율적일 수 있으며(명령 셸과의 모든 상호 작용에 대해 셰이더 필터의 새 복사본을 생성합니다. 이것이 버퍼를 비우기 위해 찾을 수 있는 가장 짧은 방법이기 때문입니다) 깨지기 쉽습니다. 자기 자신과 상호작용한다고 해서 어떤 흑마술도 생성되지는 않습니다. 작동할 것입니다.

관련 정보