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