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

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

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

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

4 ответа

Решение

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

read -e foo

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

% foo=wibble
% vared foo
wibble

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

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

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

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 = "Edit this"

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

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

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

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

$ 2c, * -pike

Другие вопросы по тегам