Назад | Перейти на главную страницу

однострочный редактор / приглашение unix?

У меня есть сценарий bash, который был бы лучше, если бы, когда я предлагаю пользователю, а не просто запрашивать ввод, если бы он предоставлял строку, которую пользователь мог бы редактировать (но полнотекстовый редактор был бы излишним, это всего лишь одна строка)

Какой инструмент это обеспечивает?

dialogПоле ввода почти правильное, но я бы предпочел, чтобы он не рисовал весь экран.

Встроенный "read" может редактировать, используя библиотеку Readline, если вы укажете ему флаг "-e":

read -e foo

В zsh у вас есть vared:

% foo=wibble
% vared foo
wibble

и курсор находится в конце колебания, вы можете редактировать, как хотите, и когда вы нажимаете Enter, вы определяете новое значение foo.

Если вы не против использования perl, вы можете использовать Term :: Readline.

На C также есть реализация readline (); и, возможно, на других языках. Я не знаю интерфейса bash для строки чтения

perldoc Term :: Readline

воспроизведен ниже, обратите внимание на образец сценария

> Term::ReadLine(3)     User Contributed
> Perl Documentation   
> Term::ReadLine(3)
> 
> 
> 
> NAME
>        Term::ReadLine - Perl interface to various "readline" packages.  If no
>        real package is found, substitutes stubs instead of basic
> functions.
> 
> SYNOPSIS
>          use Term::ReadLine;
>          my $term = new Term::ReadLine 'Simple Perl calc';
>          my $prompt = "Enter your arithmetic expression: ";
>          my $OUT = $term->OUT || \*STDOUT;
>          while ( defined ($_ = $term->readline($prompt)) ) {
>            my $res = eval($_);
>            warn $@ if $@;
>            print $OUT $res, "\n" unless $@;
>            $term->addhistory($_) if /\S/;
>          }
> 
> DESCRIPTION ...

в баше,

input = "Изменить это"

echo -en "$ input \ r"; прочитать ответ;

echo $ reply $ {input: $ {# reply}}

обратите внимание на \ r (возврат каретки) в эхо. Bracketee voodoo в последней строке печатает ответ плюс оставшуюся часть ввода, которую вы не стирали.

это не идеально - вы в основном перезаписываете входную переменную, вы действительно ее не редактируете.

$ 2c, * -пайк