pipeto
Infelizmente, o filtro interno rlwrap
pipeto
não filtra a saída da maneira desejada. Eu acho a documentação bastante enganosa, mas o que acontece é se você executa rlwrap -z pipeto some-shell
, então, dentro da interação:
-
se você digitar comandos sem nenhum sinal de pipe (
|
), eles serão passados textualmente parasome-shell
e, em seguida, a saída será simplesmente impressa; -
se você digitar
command | filter
, entãocommand
será passado parasome-shell
para interpretar e a saída será canalizada porfilter
antes de ser impressa (ondefilter
é qualquer comando que você possa executar a partir da linha de comando no seu shell Unix).
rlwrap -z pipeto asterisk
e depois lembrando de acrescentar | grc
a cada comando que deseja passar para um asterisco. Mas isso não seria muito conveniente, seria? Daí outfilter
.
outfilter
Sugiro criar o seguinte script de filtro 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;
}
Salve-o como outfilter
, torne-o executável e execute rlwrap -z './outfilter <coloring-filter>' shell
. Eu tentei com:
rlwrap -z './outfilter ccze -A' gosh
que bem colore a saída de Gauche. No seu caso, isso se tornaria algo como:
rlwrap -z './outfilter grcat grcat-config' asterisk
Se você gosta do filtro e quer ser capaz de rodá-lo sem ter que especificar seu caminho, você pode movê-lo ao lado dos filtros incorporados (no meu sistema, que está no diretório /usr/share/rlwrap/filters
).
Note que o filtro como escrito é provavelmente ineficiente (ele gera uma nova cópia do filtro de coloração para cada interação com o shell de comando, porque é o caminho mais curto que eu poderia encontrar para liberar seus buffers) e frágil, mas se a concha com a qual você está interagindo não faz nenhuma magia negra, deve funcionar.