У меня есть сценарий 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, * -пайк