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)。

作成されたフィルタはおそらく非効率的であり(コマンドシェルとのすべての対話に対してシェーダフィルタの新しいコピーを作成します。これはバッファを空にするための最短の方法であるため)壊れやすいです。自分自身と相互作用しても、どんな黒魔術も生成されません。動作します。

関連情報