Вы не "устанавливаете" приложения как это на Linux (кроме некоторых угловых случаев). Используйте свой диспетчер пакетов распределения для установки то, в чем Вы нуждаетесь - он автоматически вытянет в требуемых пакетах всего th. В случае SUSE Linux получил дистрибутивы (так как Вы используете /suse
тег) использование
zypper in dialog
(in
коротко для install
) или
yast -i
который должен дать Вам интерактивные диалоги. Очевидно, необходимо выполнить их с полномочиями пользователя root смочь изменить корневую файловую систему. Если у Вас уже есть распределение RPMs под рукой, можно использовать rpm -Uvh package1.rpm package2.rpm ...
Главные причины, почему просто копирование материала в Вашу файловую систему является неправильным:
источник двоичных файлов не может быть надежным, особенно с точки зрения безопасности. Вы просто не запускаете программ, которые кто-то дает Вам - использование пакета распределения дает Вам по крайней мере некоторое обеспечение о содержании пакета (например, будучи криптографически подписанным);
двоичные файлы связаны против общих библиотек (например, libncursesw в Вашем случае) - если Вы не обеспечиваете достаточно совместимую библиотеку, Вы направляетесь в проблемы (которые трудно отладить).
pipeto
К сожалению, встроенный фильтр pipeto
rlwrap
не фильтрует выходные данные желаемым образом. Я считаю, что документация вводит в заблуждение, но если вы запустите rlwrap -z pipeto some-shell
, а затем во взаимодействии:
, если вы вводите команды без знака вертикальной черты ( |
), они дословно передаются в some-shell
, а затем вывод просто печатается;
если вы набираете command | filter
, затем команда
передается в some-shell
для интерпретации, и выходные данные передаются через фильтр
перед печатью (где filter
- это любая команда, которую вы можете запустить из командной строки в вашей оболочке Unix).
Хорошая новость в том, что вы можете получить желаемое поведение, kindof, sortof, запустив rlwrap -z pipeto asterisk
, а затем не забудьте добавить | grc
каждой команде, которую вы хотите передать звездочке. Но это было бы не очень удобно, правда? Отсюда аутфильтр
.
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
. Я пробовал использовать:
rlwrap -z './outfilter ccze -A' gosh
, который красиво окрашивает вывод Гоша.В вашем случае это будет примерно так:
rlwrap -z './outfilter grcat grcat-config' asterisk
Если вам нравится фильтр и вы хотите иметь возможность запускать его без указания пути к нему, вы можете переместить его вместе со встроенными фильтрами (в моей системе это в каталоге / usr / share / rlwrap / filters
).
Обратите внимание, что фильтр в том виде, в каком он написан, вероятно, неэффективен (он порождает новую копию окрашивающего фильтра для каждого взаимодействия с командной оболочкой, потому что это самый короткий способ, который я мог найти, чтобы он очистил свои буферы) и хрупкий, но если оболочка, с которой вы взаимодействуете, сама по себе не творит черной магии, она должна работать.