O "read" embutido pode fazer edição, usando a biblioteca Readline, se você der o sinalizador "-e":
read -e foo
Eu tenho um script bash que seria mais interessante se, quando eu solicitar ao usuário, em vez de apenas pedir informações, se ele fornecesse uma linha que o usuário pudesse editar (mas um editor de texto completo seria um exagero, é apenas uma linha)
Que ferramenta fornece isso?
A caixa de entrada do dialog
está quase certa, mas eu prefiro não pintar a tela inteira.
No zsh, você tem vared
:
% foo=wibble
% vared foo
wibble
e o cursor está no final do wibble, você pode editar como quiser e quando pressionar enter, você definiu o novo valor de foo
.
Se você não se importa em usar perl, você pode usar Term :: Readline
Existe também uma implementação readline () em C; e provavelmente em outros idiomas. Eu não sei a interface do bash para readline
perldoc Termo :: Readline
reproduzido abaixo, anote o script de amostra
> 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 ...
no bash,
input="Edit this"
echo -en "$input\r"; read reply;
echo $reply${input:${#reply}}
observe o \ r (retorno de carro) no eco. O voodoo entre colchetes na última linha imprime a resposta mais a parte restante da entrada que você não apagou.
não é ideal - você basicamente sobrescreve o input var, você não o edita.
$ 2c, * -pike