um editor / prompt unix de linha única?

1

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.

    
por jes5199 23.02.2010 / 19:29

4 respostas

6

O "read" embutido pode fazer edição, usando a biblioteca Readline, se você der o sinalizador "-e":

read -e foo
    
por 23.02.2010 / 19:57
1

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 .

    
por 08.03.2010 / 05:30
0

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 ...
    
por 23.02.2010 / 19:57
0

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

    
por 27.04.2010 / 11:34